我们知道窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自于相同的客户端,或者单个浏览器实例是否一直在查看页或站点,到服务器的每一往返都将销毁并重新创建页,因此超过单个页的生命周期,页信息将不存在
状态管理的作用主要体现在:
1、指示用户信息,关联浏览器实例
2、使得页与页之间,请求与请求之间能够共享信息
3、更加快速的数据存储
除了Cookie外,几乎没有其他的方法在客户端的机器上写入数据(就连Cookie的写入操作也是浏览器进行的:服务器通过发回响应,让浏览器增加Cookie,当然,浏览器也可以通过安全配置来禁止。现在的大多数的网站都是利用Cookie来记录一些数据的(比如说你的ID),以便于你下一次访问网站时能直接以前的配置,所以最好是不要轻易关闭Cookie,那些Cookie是不是存在着一些风险呢?如果用户可以改变Cookie中的信息的话那里服务器还傻傻地以之前的配置来往回页?有没有这样的可能?刚刚查看了下浏览器,它是没有办法修改Cookie的信息的,只能是清除Cookie。但是为了防止Cookie信息的泄露,我们可以对Cookie进行加密!
好吧,现在来看看如何使用C#来增删查改Cookie
//要使用Response对象把Cookie重新返回浏览器,再由浏览器把在客户端
//机器上写Cookie
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie Cookie = new HttpCookie (CookieName.Text,CookieValue.Text);
// Cookie.Expires = DateTime.Now.AddSeconds(int.Parse(CookieExpires.Text));
Response.Cookies.Add(Cookie);
}
protected void Button3_Click(object sender, EventArgs e)
{
HttpCookie Cookie = Request.Cookies[CookieName .Text];
if (Cookie != null)
{
Cookie_Info.Text = Cookie.Name + "___" + Cookie.Value + "-----" + Cookie.Expires;
}
}
//删除Cookie
//我们不能直接的把Cookie删除掉,服务器是不可能删除Cookie的,删除Cookie的操作是浏览器进行的。
//我们可以把Cookie设置为过去的时间,让Cookie过期
protected void Button2_Click(object sender, EventArgs e)
{
Cookie_Info.Text = "";
HttpCookie Cookie = Request.Cookies[CookieName.Text];
if (Cookie != null)
{
Cookie.Expires = DateTime.MinValue;
}
Response.Cookies.Add(Cookie);
}
这里有几个注意点:
1、在增加Cookie时,如何我们没有设置它的有效时间,则它会在会话结束后马上失效
2、当我们查找Cookie时,往往是我们是通过判断Cookie是否存在而不是判断Cookie的有效期是还过了,因为Cookie的有效期是相对了浏览器来说的,它对服务器是无效的!服务器是无法访问到它的有效时间的!但是可以修改它的有效时间~
3、对于过期的Cookie,服务器是没有办法读取它的,但是它在浏览器中是存在的!这时就产生来一些多余的Cookie,而这些Cookie如果过多而没有被删除时则它会一直存在内存中,占着内存不放!所以我们题目才说是崩溃吧,Cookie!
这里再加一张图片,是我在测试时的界面:
4、如果你想在查看浏览器保存的Cookie可用在浏览器:工具-》选项-》隐私中可以看到~(PS:我是用火狐,其他的有可能有些不一样!)