博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cookie,seesion学习
阅读量:7161 次
发布时间:2019-06-29

本文共 3976 字,大约阅读时间需要 13 分钟。

一,为什么需要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    {        ///         /// 无设置时间的cookie,如不设置时间,cookie的有效期为浏览器关闭的时候自动失效        ///         /// 标识        /// 值        /// 
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; } } /// /// Cookies赋值 /// /// 标识 /// 值 /// 有效天数 ///
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; } } /// /// 读取Cookies /// /// 标识 ///
public string getCookie(string CookieName) { HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies[CookieName]; if (cookie != null) { return cookie.Value.ToString(); } else { return null; } } /// /// 删除Cookies /// /// 标识 ///
public bool delCookie(string CookieName) { try { HttpCookie cookie = new HttpCookie(CookieName); //cookie.Domain = ".xxx.com";//当要跨域名访问的时候,给cookie指定域名即可,格式为.xxx.com cookie.Expires = DateTime.Now.AddDays(-1); System.Web.HttpContext.Current.Response.Cookies.Add(cookie); return true; } catch { return false; } } }}

实现页面:

Cookie c = new Cookie();            c.delCookie("123");            c.setCookieNoTime("no","no");            c.setCookie("999", "999", 999);

 

以上方法可以在页面输出浏览器的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"] = "456";

使用session代码:

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

 

转载于:https://www.cnblogs.com/May-day/p/6668108.html

你可能感兴趣的文章
WinForm 窗体间传递数据的一些方法[转]
查看>>
在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解) 背景
查看>>
如何搭建ipv6网络
查看>>
html 常用的标签
查看>>
jquery之on()绑定事件和off()解除绑定事件
查看>>
“ji32k7au4a83”被用作密码的次数不太正常
查看>>
DAX函数大全
查看>>
【剧透】2017云栖大会·北京峰会——企业云上业务优化专场
查看>>
突然想起的几个小故事
查看>>
《R语言编程艺术》——1.6 启动和关闭R
查看>>
云计算成绩出色 迅雷营收再获重要支撑
查看>>
微软说它深爱着Linux,现在它用行动证明了
查看>>
Exch UM: How to integrate Exchange 2010 (or 2007) with Trixbox 2.8
查看>>
我的友情链接
查看>>
小白云路-------走进linux之历史篇
查看>>
组件、jar、class依赖关系 梳理工具
查看>>
9.17lnmp练习,(未完)
查看>>
使用VMware安装Hadoop全过程,咋就没一键安装或装好的vmdk下载呢
查看>>
办公资源:你曾错过的PPT视频教程网站
查看>>
服务器遭受的***主要有哪几种
查看>>