一,为什么需要cookie和session?

1,Web应用程序是使用HTTP协议传输数据的。然而HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。所以要跟踪该会话,必须引入一种机制。

2,Cookie和 Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决 HTTP无状态的问题

二,cookie实现:

1,cookie实际上是由 Web 服务器保存在用户浏览器上的小文本文件

2,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来(用小文本文件将资料记录下来)。

3,当浏览器再请求同一个网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

实现和查看代码:

Cookie类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Http;
using System.Web; namespace Common
{
public class Cookie
{
/// <summary>
/// 无设置时间的cookie,如不设置时间,cookie的有效期为浏览器关闭的时候自动失效
/// </summary>
/// <param name="CookieName">标识</param>
/// <param name="CookieValue">值</param>
/// <returns></returns>
public bool setCookieNoTime(string CookieName, string CookieValue)
{
try
{
HttpCookie cookie = new HttpCookie(CookieName);
//cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com
cookie.Value = CookieValue;
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
return true;
}
catch
{
return false;
}
} /// <summary>
/// Cookies赋值
/// </summary>
/// <param name="CookieName">标识</param>
/// <param name="CookieValue">值</param>
/// <param name="CookieDay">有效天数</param>
/// <returns></returns>
public bool setCookie(string CookieName, string CookieValue, int CookieDay)
{
try
{
HttpCookie cookie = new HttpCookie(CookieName);
//cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com
cookie.Expires = DateTime.Now.AddDays(CookieDay);
cookie.Value = CookieValue;
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
return true;
}
catch
{
return false;
}
} /// <summary>
/// 读取Cookies
/// </summary>
/// <param name="CookieName">标识</param>
/// <returns></returns>
public string getCookie(string CookieName)
{
HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies[CookieName];
if (cookie != null)
{
return cookie.Value.ToString();
}
else
{
return null;
}
} /// <summary>
/// 删除Cookies
/// </summary>
/// <param name="CookieName">标识</param>
/// <returns></returns>
public bool delCookie(string CookieName)
{
try
{
HttpCookie cookie = new HttpCookie(CookieName);
//cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com
cookie.Expires = DateTime.Now.AddDays(-);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
return true;
}
catch
{
return false;
}
}
}
}

实现页面:

            Cookie c = new Cookie();
c.delCookie("");
c.setCookieNoTime("no","no");
c.setCookie("", "", );
<script type="text/javascript">
window.onload = function () {
//alert(document.cookie);
document.getElementById("cookie").innerHTML = document.cookie;
}
</script>
<div id="cookie">
</div>

以上方法可以在页面输出浏览器的Cookie,也正是这个原因cookie的使用时不安全的,所以在使用cookie的情况下一般会有以下几种方式:

1,设置到密码时都需要加入时间戳加密,以至于每次密文都不一样

2,客户端请求时,每次或定时更新 Cookie 内容

3,每次向 Cookie 写入时间戳,数据库需要记录最后一次时间戳

4,客户端提交 Cookie 时,先解密然后校验时间戳,时间戳若小于数据数据库中记录,即意味发生攻击。

三,session的实现:

1,Session对象是在客户端第一次请求服务器的时候创建并且当session第一次被启用时,一个唯一的标识被存储于本地的cookie中。(也就是session保存在服务器中,而不是客户端)

2,Session保存在服务器端。为了获得更高的存取速度,服务器把Session放在内存里。每个客户端都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。

3,Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。客户端每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
4,由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

5,新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。而在同一个客户端的不同浏览器之间打开同一个网站也会在服务器有各自不同的session

储存代码:

Session["lable"] = "";

使用session代码:

 string str = Session["lable"].ToString();

cookie,seesion学习的更多相关文章

  1. Cookie&Seesion会话 共享数据 工作流程 持久化 Servlet三个作用域 会话机制

    Day37 Cookie&Seesion会话 1.1.1 什么是cookie 当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中.这样,当该浏览器 ...

  2. JavaWeb 后端 <四> 之 Cookie HttpSession 学习笔记

    一.会话管理概述 1.什么是会话? 好比一次通话.打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话. 有功能 可以  文件 新建会话 2.解决的问题是什么? ...

  3. JavaEE Cookie HttpSession 学习笔记

    1. 会话管理概述 1.1 什么是会话 好比一次通话.打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话. 有功能 可以  文件 新建会话 1.2 解决的问题是 ...

  4. Session和Cookie的学习笔记2

    <?php /* Cookie在计算机中保存的格式 用户名@网站地址[数字].txt Cookie在文件夹下,每个Cookie文件都是一个简单而又普通的文件件而不是程序,Cookie中的内容大多 ...

  5. Cookie seesion 赋值

    后台赋值: Session["uid"] = userid;//后台 后台取值: Label1.Text = Session["userid"].ToStrin ...

  6. JavaWeb——Cookie,Session学习汇总

    什么是Cookie Cookie的作用 安全性能 Cookie的语法 Cookie注意细节 Cookie实例练习 什么是会话Session Session语法 Session与浏览器窗口的关系 ses ...

  7. 【JAVAWEB学习笔记】16_session&cookie

    会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个 ...

  8. Cookie学习笔记二:Cookie实例

    今天说说刚刚学到的两个Cookie的最经典应用:自己主动登录和购物车设置 一:自己主动登录 须要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp ...

  9. jQuery插件之Cookie插件使用方法~

    一.介绍 1-1.jQuery.Cookie.js插件是一个轻量级的Cookie管理插件.下载地址:jQuery-cookie.js  有需要的朋友,右键另存为即可! 二.使用方法 2-1.引入jQu ...

随机推荐

  1. 175-基于TI DSP TMS320C6455、Xilinx V5 FPGA XC5VSX95T的高速数据处理核心板

    基于TI DSP TMS320C6455.Xilinx V5 FPGA XC5VSX95T的高速数据处理核心板 一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP ...

  2. demo板 apt-get install stress

    demo 那个网口 没有绑定mac 大电脑绑定了mac 大电脑上网认证系统:http://1.1.1.2 大电脑mac:6C-4B-90-3C-D5-7B 将demo板的mac改为大电脑mac ifc ...

  3. shell脚本检索所有mysql数据库中没有primary key的表

    1.mkdir -p /root/scripts/ 2. cd /root/scripts/ vim query.sql,代码如下: SELECT CONCAT(t.table_schema,&quo ...

  4. $Dsu$ $on$ $Tree$ 复习

    \(Dsu\) \(on\) \(Tree\) 复习 发现最近有点头晕,突然这东西就不会了,头疼了很久,决定写一份记录啊. 大致认识 适用范围一般在处理树上子树统计问题,不支持在线回答询问以及修改. ...

  5. Linux 给用户 赋某个文件夹操作的权限

    https://my.oschina.net/cqyj/blog/1796047 在root用户登录的情况,赋予opt目录给liuhai这个用户权限 示例代码: # 将目录/opt 及其下面的所有文件 ...

  6. JavaScript中的编码解码

    1.URI 统一资源标识符(URI)是一个用于标识某一互联网资源名称的字符串.,该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作.Web上可用的每种资源 -HTML文档.图像 ...

  7. Delphi 判断特定字符是为单字节还是双字节

    判断特定字符是为单字节还是双字节 // mbSingleByte 单字节字符 //mbLeadByte 双字节字符首字节 //mbTrailByte 双字节字符尾字节 Edit1.Text:='010 ...

  8. HTML 3-列表、表单、语义化

    有序列表.无序列表.自定义列表在语义上的区别 1.有序列表ol>li:列表有顺序编号(默认列表前加1.,2.,3.,...编号),适用于有逻辑顺序的排列项目,而且次序不能乱.2.无序列表ul&g ...

  9. python的迭代器(转自廖雪峰老师python基础)

    我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...

  10. SQL案例

    1.字符串去掉空格 原因:(1)空格 (2)制表符 )); ); ); INSERT INTO #temp SELECT '明天我就结婚了 '; DROP TABLE #temp; --1.2 采用A ...