1. Cookie
1) 定义: 文本信息,记录用户状态的文本信息
2)注意:
【1】Cookie是和站点相关的,并且每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器
【2】Cookie保存在浏览器端,而且浏览器会在每次请求时把这个站点相关的Cookie提交到服务器,且服务器返回的Cookie更新回数据库***因此可以将信息保存在Cookie中,然后在服务器端读取,修改(看报文)
【3】在服务器端控制Cookie案例,实现记住用户名的功能:
设置值的页面:Response.SetCookie(new HttpCookie(“UserName”, username));
读取值的页面:username=Request.Cookie[“UserName”].Value;
【4】如果不设定Expires 那么生命周期则关闭浏览器即终止,否则最多到Expires的时候终止。通常设置“保存7天”
【5】Cookie的缺点: 不能存储过多信息,机密信息不能存在(不要把不希望用户看到的或者不能修改的信息放到Cookie) Cookie是可以被清除, 不能丢弃的信息不能放在cookie中
【6】Cookie无法跨不同的浏览器:浏览器的“隐私模式/小号模式”
3) 设置
HttpCookie cookie1 = context.Request.Cookies["txt"]; //请求cookie
**************************************************
HttpCookie cookie = new HttpCookie("txt"); //设置Cookie对象 txt 是cookie名字
cookie.Value = "welcome here"; //设置cookie值
context.Response.SetCookie(cookie); //当页面有请求时,这里会响应
4) 属性Expires
cookie.Expires = DateTime.now.属性(时间)
(1)如果不设定Expires的时间,则关闭浏览器后cookie失效 (2)如果设定的expires,则即便关闭浏览器,除非到期,否则再次打开浏览器,还能读取
5)用Cookie记住用户名
(1))设置html页面
(2)设置cookie 名称 值 :
HttpCookie cookie = new HttpCookie("UserName"); //设置Cookie对象 txt 是cookie名字
string acount = context.Request["acount"];
cookie.Value = acount; //设置cookie值
cookie.Expires = DateTime.Now.AddSeconds(20);
context.Response.SetCookie(cookie); //当页面有请求时,这里会响应
(3)第二次打开页面后,cookie的设置
先读取一开始设置的html页面——>获取提交按钮的值 根据提交按钮发送过来的状态来判断现在页面处于什么动作——> 按钮为空,证明现在页面现在没有做发送操作,所以将之前对页面的操作 进行同样的填充操作,——>按钮不为空:证明现在页面又新发送了对页面的操作信息,将这些信息做(2)的操作
string cookieViewHtliFile = context.Server.MapPath("~/cookie.html");
string cookieHtml = File.ReadAllText(cookieViewHtliFile);
string loginBtn = context.Request["loginBtn"];
if (string.IsNullOrEmpty(loginBtn))
{
HttpCookie cookieLastName = context.Request.Cookies["UserName"];
if (cookieLastName != null)
cookieHtml = cookieHtml.Replace("@acount", cookieLastName.Value);
else
cookieHtml = cookieHtml.Replace("@acount", "");
context.Response.Write(cookieHtml);
}
else
{
string name = context.Request["acount"];
HttpCookie cookieLastName = new HttpCookie("UserName");
cookieLastName.Value = name;
cookieLastName.Expires = DateTime.Now.AddSeconds(20);
context.Response.SetCookie(cookieLastName);
context.Response.Redirect("cookie.html");
}
注意:cookie.Path = “~/文件夹名/文件”; 这样使得只有某个文件下的某个页面可以读取cookie
2.Session
和cookie一样 但又用不同
设置方面,需要先引进接口IRequiresSessionState
session开始时的设置:
context.Session[“one”] = “nice”;
context.Session[“two”] = “898”; 值可以直接设置 也可以从html页面获取
页面重新打开后:
string s1 = (string)context.Session["one"];
context.Response.Write(s1 == null ? "没有这个session" : "one="+s1+"\n");
int? s2 = Convert.ToInt32(context.Session["two"]);
context.Response.Write(s2 == null ? "没有这个session" : "two="+s2);
1) 属性
<br/>【1】“服务器端的Cookie”: 医生需要一个私人账本,记录病人的编号和身份对应关系。由于身份证无法造假,所以能够保证信息不被假冒。由此可推:身份证无法造假,这个身份证就可以唯一标识这个用户,核心信息放到服务器上,客户端无法修改
<br/>【2】Cookie不能存储机密数据, 要使ASP.NET已经内置Session机制,普通的HttpHandler要能够操作Session 要实现`IRequiresSessionState`接口
<br/>【3】Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存当前客户端相关的数据(当前网站任何一个页面都能取到Session)
<br/>【4】Session有自动销毁机制,如果一段时间内浏览器没有服务器发生任何交互,则Session会定时销毁。这也是为什么一段时间不操作,系统会自动退出
<br>【5】在web.config的system.web节点下配置session 节点的timeout,单位是分钟,默认20 `<sessionState timeout = "0.5"></sessionState>`
context.Session[HtmlFile.str] = acount; //设置session,保存当前用户账号
//session设置过期时间是在web.config中<system.web>标签下添加
//<sessionState timeout = "时间"></sessionState>
//context.Response.Redirect("saveLogin.ashx"); 这样直接通过文件名跳转,过于死板了
//为了能直接跳转到之前操作的页面:
string url = context.Session["newLogin"].ToString();
if (url != null)
context.Response.Redirect(url);
****************
----------------------------
string acount = context.Session[HtmlFile.str].ToString(); //获取session中的HtmlFile.str的信息
if (acount == null)
{
context.Session["newLogin"] = context.Request.Url.ToString(); //获取当前页的地址
context.Response.Redirect("Login.html");
}
else
context.Response.Write("当前用户:" + acount);
}
2)去掉销毁时间
context.Session.A
注意:每重新生成一次,session可能会失效
服务器一重启,session数据就会消失 为了解决这个问题,需要设置进程外Session
方法:Session保存在SQLServer中配置方法:
1)在路径C:\Windows\Microsoft.NET\Framework64\v4.0.30319找到aspnet_regsql.exe
[1] 打开终端(win+r) 输入 cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319回车
[2] 输入 aspnet_regsql.exe -ssadd -sstype p -S 127.0.0.1 -U sa -P 数据库密码
【-sstype p 表示数据库名固定为ASPState, -S(大写)为数据库服务器地址 -U和-P分别为数据库的用户名和密码】
2)在web.config添加
<sessionState timeout="20" mode="SQLServer" sqlConnectionString="server=.; uid=sa;password=数据库账号密码"></sessionState>
3)配置完 回车