ASP.NET的Cookie和Session

HTTP属于应用层,HTTP协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。

无状态
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
服务器不记的上次给了浏览器什么,否则服务器的压力会太大。每次请求到达asp.net,都创建一个HttpHandler的新对象来处理。

    public class TestController : Controller
    {
        int i=0;

        public ActionResult Index()
        {
            //每次访问Index页面TestController都会重新实例化,i每次都会实例化为0
            i = i + 1;
            return View();
        }

    }

无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

两种用于保持 HTTP 连接状态的技术就应运而生了,一个是Cookie,一个是Session。

Cookie的基本概念
Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
1、Cookie只是一段字符串,并不能执行。
2、大多数浏览器规定Cookie大小不超过4K,每个站点能保存的Cookie不超过20个,所有站点保存的Cookie总和不超过300个。
3、除了Cookie外,几乎没有其他的方法能在客户端的机器上写入数据(就连Cookie的写入操作也是浏览器进行的)。当然,连Cookie都可以通过浏览器安全配置来禁止。
4、在使用Cookie时,必须意识到其固有的安全弱点。Cookie毕竟是存放于客户端的。因此不要在Cookie中保存保密信息,如用户名、密码、信用卡号等。在Cookie中不要保存不应该由用户掌握的内容,也不要保存可能被其他窃取Cookie的人控制的内容。
5、不同浏览器Cookie是独立的。
6、Cookie是把信息储存在HTTP报文头中的。

        public ActionResult Index()
        {
            //写入Cookie三种方式
            //写入Cookie时Path的问题:Path为空,当前路径和子文件夹都可以读取。
            //如果有主站及二级域名站且cookie要共享的话则要加入如下设置 cookie.Domain = ".cnblog.com";
            //方式1
            var cookie = new HttpCookie("name", "linq");
            Response.Cookies.Add(cookie);
            //不设置Expires关闭浏览器后cookie就会失效

            //方式2
            Response.Cookies["name1"].Value = "linq1";
            Response.Cookies["name1"].Expires = DateTime.Now.AddHours(1);
            //方式3
            var acookie = new HttpCookie("name2");
            acookie.Value = "linq2";
            acookie.Expires = DateTime.Now.AddHours(1);
            Response.Cookies.Add(acookie);

            //读取Cookie的值之前,应该确保该 Cookie 确实存在。否则,您将得到一个异常
            //读取Cookie
            var httpCookie = Request.Cookies["name1"];
            if (httpCookie != null)
            {
                var name = httpCookie.Value;
            }

            //修改和删除cookie
            //修改的方法与创建方法相同
            var cookieEdit = new HttpCookie("name", "linq");
            cookieEdit.Expires = DateTime.Now.AddDays(-1); //将其有效期设置为过去的某个日期。当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie。
            Response.Cookies.Add(cookieEdit);
            return View();
        }

前端jquery.cookie.js操作cookie

<script type="text/javascript" src="Scripts/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="Scripts/jquery.cookie.js"></script>

<script type="text/javascript">
    //expires:(Number | Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期;
    //path:(String)创建该Cookie的页面路径;
    //domain:(String)创建该Cookie的页面域名;
    //secure:(Booblean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
    $(document).ready(function () {
        //读取cookies
        var s = $.cookie(‘name2‘);
        //修改cookies
        $.cookie(‘name2‘, ‘JQlinq‘);
        //删除cookies,修改
        $.cookie(‘name1‘, null, { expires: new Date(‘2016/1/6 11:44:30‘), path: ‘/‘ });   //通过传递null作为cookie的值即可
    });

</script>

优点:
● 跨页面维持用户状态、信息
● 使用方便,并且能存储任何类型
● 能保存每个客户端的信息
● 安全的、透明的

缺点:
● 因为Session是保存在服务端的内存中的,随着客户端请求的增多,很有可能影响到性能
● 在Web.conig中,sessionState节点的mode属性,如果设置为"StateServer"或"SQLServer",就必须为存储到Session中的对象打上[Serializable]。这样在存储、读取Session的时候,不断地序列化和反序列化,也会影响到性能

        public ActionResult Index()
        {
            Session.Add("aa", "aa");
            Session["aa"] = "cc";
            Session.Add("bb", "bb");
            Session.Remove("bb");
            return View();
        }

如果我们想让Session失效:

<system.web>
    <sessionState mode="off" />
</sytem.web>

这也是ASP.NET Session机制所选用的默认Mode,在该模式下,只保存当前应用程序域的数据。如果重启服务器,Session保存的数据会全部丢失(如果30分钟没调用Session就会丢失)

<system.web>
    <sessionState mode="InProc" timeout="30" />
</system.web>

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

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

时间: 2024-08-06 16:01:53

ASP.NET的Cookie和Session的相关文章

asp.net内置对象session和cookie

1.各个机器的session对象不同,不同浏览器之间不通用(换个浏览器,是个新的session). 2.session状态对象起始于网页打开,终止于网页关闭,生命周期有限. 3.关闭浏览器/超时的情况下,session对象即被销毁,不要放太多/太大的对象在session. 4.Web应用程序在传统意义上无状态,需要使用内置对象进行客户端状态的保存. 5.session对象和Application对象存储在服务端,cookie对象存储在客户端. 6.session对象适用于安全性相比之下较高的场合

不拖控件ASP.NET——探知cookie和session(2)

    接着上篇的博客我们来讲解服务器端保存数据的机制-session     我们知道cookie是保存在客户端的,这样数据就存在一个不安全性,此外还有 一个问题就是不能够存储大量的数据,我们上篇博客还遗留一个问题就是客户端是可以篡改数据的,相当于保留在病人手上的病历本是可能被用户篡改的(一般情况下,用户不会篡改,这样多危险了,医生误诊怎么办?哈哈)     此外医生会给每个患者编制一个编号,并且自己再保存一个编号,这样当病人来的时候根据编号来识别病人的身份,当然用户会可以别人的编号猜出来自己

ASP.NET Cookie和Session

Cookie和Session C#在服务器,JS在客户端 客户端验证不能代替服务端验证 Http HTTP属于应用层,HTTP 协议一共有五大特点:1.支持客户/服务器模式;2.简单快速;3.灵活;4.无连接;5.无状态. 无状态 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大.另一方面,在服务器不需要先前信息时它的应答就较快. Http协议是无状态的,不会记得上次和网页“发生了什么”. HTTP协议是无状态的

ASP.NET之Application、Session和Cookie的区别

在Asp.net中Application.Session和Cookie都可以保存信息,那么它们有什么不同呢? 一.首先Application是在服务器端建立一个状态变量,存储于服务器的全局变量来存储所需信息.它是建立在内存中的,这个变量可以被网站的所有页面访问. 访问Application对象变量方法: Application["变量名"]=变量值        变量=Application["变量名"] 实例:可以用在网站统计用户的访问量,便于管理员对网站访问情况

Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写,vb和c#的代码都是经过测试的:一些童鞋说代码有问题的 注意下    什么? 你还在用vs2008 vs2005? 请自行重载 带有 optional 标致的函数   童鞋们提到的 密码修改后 要失效的问题 当时没有想到 个人认为 大致方向可以> >1. 每个用户生成1个xml 里面保存随机的几

不拖控件ASP.NET—探知cookie和session(1)

1.      为什么会出现cookie和session? ?  先看一个例子:     我们还是使用之前的NVelocity,不清楚的参看链接:http://blog.csdn.net/u010955843/article/details/42977533,同样建立commonhelper类,里面封装NVelocity模板,并且建立html也作为渲染的模板进行显示.      html页 <span style="font-family:Microsoft YaHei;">

Cookie和Session(session过程和设置进程外session)

cookie 和  session 的区别 cookie 是保存在客户端上的一种机制   而session 是保存在服务端的一种机制 cookie的理解: 打个简单的比方,一个人生病了去A医院看病,回来的时候医生给了病人一个病历本(相当于cookie)  那么下次病人去复查的时候  就要带着这个病例本队A医院,如果拿着这个病历本去了B医院 B医院肯定是不承认的(不能够跨域取cookie,比如a.com的cookie只能由a.com, x.a.com, y.a.com等站点读取,b.com则不可以

理解Cookie和Session机制

转自:http://my.oschina.net/xianggao/blog/395675 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. Cookie机制 Cookie技术是客户端的解决方案,Cooki

理解Cookie和Session机制(转)

目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie的有效期 Cookie的修改.删除 Cookie的域名 Cookie的路径 Cookie的安全属性 JavaScript操作Cookie 案例:永久登录 Session机制 什么是Session 实现用户登录 Session的生命周期 Session的有效期 Session的常用方法 Session