session是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以Cookie或URL重写为基础。默认使用Cookie来实现,系统会创造一个名为JSESSIONID的输出Cookie,或称为"Session Cookie",以区别Persistent Cookies(通常所说的Cookie).Session Cookie是存储在浏览器中,并不是写在硬盘上的,但是把浏览器的Cookie禁止后,使用response对象的encodeURL或encodeRedirectURL方法编码URL,WEB服务器会采URL重写的方式传递Sessionid,用户就可以在地址栏看到jsessionid=A09JHGHKHU68624309UTY84932之类的字符串。

通常Session Cookie是不能跨窗口使用,当用户新开了一个浏览器进入相同的页面时,系统会赋予用户一个新的SessionID,这样信息共享的目的就达不到,此时可以把SessionID保存在Persistent Cookie中,然后再新的窗口中读出来,就可以得到上一个窗口的SessionID了,这样通过Session Cookie和Persistent Cookie的结合,实现了跨窗口的会话跟踪。

session的工作原理
就session的实现而言,好像是这样的:
(1)当有Session启动时,服务器生成一个唯一值,称为SessionID(好像是通过取进程ID的方式取得的)。
(2)然后,服务器开辟一块内存,对应于该SessionID。
(3)服务器再将该SessionID写入浏览器的cookie(一些在网页的源代码中有所体现)。
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放该内存块。
(5)当浏览器连入IIS(服务器)时并请求的ASP(脚本语言)内用到Session时,IIS(服务器)就读浏览器Cookie中的SessionID。
(6)然后,服务检查该SessionID所对应的内存是否有效。
(7)如果有效,就读出内存中的值。
(8)如果无效,就建立新的Session。

注意:
(1)在大浏览量的网站,Session并不保险,我们过去的网站就经常碰到存在Session中得值不正确(可能出现重复的Session ID)。
(2)Session ID不能从硬盘上的Cookie文件获得,如果想在客户端获知自己的Session ID,只能通过Javascrīpt来读取。

 

Cookie和会话状态
做BS开发,这两个概念必不可少,先来个大概了解,没有实际应用很难深入,深入看参考地址!
什么是 Cookie?
Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。 Cookie 的基本工作原理如果用户再次访问站点上的页面,当该用户输入 URLwww.*****.com时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它与页面请求一起发送到您的站点。

Cookie 有哪些用途?
最根本的用途是:Cookie 能够帮助 Web 站点保存有关访问者的信息。更概括地说,Cookie 是一种保持Web 应用程序连续性(即执行“状态管理”)的方法.使 Web 站点记住您.

什么是会话Session?
当用户访问您的站点时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束。

Response.Cookie("username").value="aa" 写入
username=Request.Cookies("username").value 读取
最好用SESSION比较方便
session("username")="aa" 写入
username=session("username") 读取

 

C# 创建读取:

方法1:
Response.Cookies["username"].Value="heaiping";
Response.Cookies["username"].Expires=DateTime.Now.AddDays(1);

方法2:
System.Web.HttpCookie newcookie=new HttpCookie("username");
newcookie.Value="gjy";
newcookie.Expires=DateTime.Now.AddDays(1);
Response.AppendCookie(newcookie);


创建带有子键的cookies:
System.Web.HttpCookie newcookie=new HttpCookie("user");
newcookie.Values["username"]="gjy";
newcookie.Values["password"]="111";
newcookie.Expires=DateTime.Now.AddDays(1);
Response.AppendCookie(newcookie);



cookies的读取:

无子键读取:
if(Request.Cookies["username"]!=null)
{
Response.Write(Server.HtmlEncode(Request.Cookies["username"].Value));
}

有子键读取:
if(Request.Cookies["user"]!=null)
{
Response.Write(Server.HtmlEncode(Request.Cookies["user"]["username"].Value));

FROM:

Cookies和Session(二)

一、理解Session机制:
Session是一种用于服务器端状态管理的机制,服务器使用一种键值对的结构来保存信息。当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识 - 称为 Session id,如果已包含一个Session id则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个 Session检索出来使用。在ASP.NET中,默认情况下这个Session id会存储在客户端浏览器的cookie 中,默认情况下如果不对Session做任何写操作的话,客户端是不存储这个Session id的,可以通过在页面拖一个button,不要对Session做任何写操作,然后在Click事件中打印Session.SessionID,当单击button时每次SessionID都是不同的。
 protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(Session.SessionID);
    }

这说明服务器端的Session id都是重新创建的。
Session id的存储方式有以下四种
1、AutoDetect
Web.config做相应的配置如下:
<system.web>
    <sessionState  cookieless="AutoDetect">
    </sessionState>
</system.web>
ASP.NET 确定请求浏览器或请求设备是否支持 Cookie。如果请求浏览器或请求设备支持 Cookie,则 AutoDetect 使用 Cookie 来保留用户数据;否则,将在查询字符串中使用一个标识符。如果浏览器或设备支持 Cookie,但当前禁用了 Cookie,则请求功能仍会使用 Cookie(也就是禁止不了Session所用的Cookie,这一点我有点疑惑,我禁止掉ie的Cookie,但仍然可以使用Session)。
 
2、UseCookies
Web.config做相应的配置如下:
<system.web>
    <sessionState  cookieless="UseCookies">
    </sessionState>
</system.web>
 无论浏览器或设备是否支持 Cookie,都使用 Cookie 来保留用户数据。
 
3、UseDeviceProfile
Web.config做相应的配置如下:
<system.web>
    <sessionState  cookieless="UseDeviceProfile">
    </sessionState>
</system.web>
 ASP.NET 根据 HttpBrowserCapabilities 设置来确定是否使用 Cookie。如果 HttpBrowserCapabilities 设置指示浏览器或设备支持 Cookie,将使用 Cookie;否则,将在查询字符串中使用一个标识符。
 
4、UseUri
Web.config做相应的配置如下:
<system.web>
    <sessionState  cookieless="UseUri">
    </sessionState>
</system.web>
无论浏览器或设备是否支持 Cookie,调用功能都使用查询字符串来存储标识符。这时候ASP.NET会将Session id存放在地址栏中,当访问某个写了Session的页面时,地址栏会变成:
http://localhost:1237/WebSite6/(S(vyn3bk55h4a03w455vjiwj21))/default4.aspx
这时候你可以去打印Session id,你会发现Session id=vyn3bk55h4a03w455vjiwj21。

二、ASP.NET中Session的存储模式有以下五种:
1、Custom
 会话状态将使用自定义数据存储区来存储会话状态信息。
 
2、InProc
 会话处于正在处理 ASP.NET 辅助进程的状态。
 
3、Off
 会话状态被禁用。
 
4、SQLServer
 会话状态将使用进程外 SQL Server 数据库来存储状态信息。
 
5、StateServer
 会话状态将使用进程外 ASP.NET 状态服务来存储状态信息

posted on 2010-04-26 21:10  好高务远  阅读(329)  评论(0)    收藏  举报