Http状态的传递和保存 之 自己实现“服务器端Cookie”
2014-02-17 23:05
429 查看
Cookie不能存储机密数据。如果想存储数据,可以保存一个Guid到Cookie中,
然后在服务器中建立一个以Guid为Key,复杂数据为Value的静态Dictionary。
Guid就相当于用户的一个“令牌”。
SessionMgr.cs
登录页面:
跳转页面:
然后在服务器中建立一个以Guid为Key,复杂数据为Value的静态Dictionary。
Guid就相当于用户的一个“令牌”。
SessionMgr.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace SessionMgr { /// <summary> /// 模拟服务器端的Cookie。 /// Cookie不能存储机密数据。如果想存储数据,可以保存一个Guid到Cookie中, /// 然后在服务器中建立一个以Guid为Key,复杂数据为Value的静态Dictionary。 /// Guid就相当于用户的一个“令牌”。 /// </summary> public class SessionMgr { /// <summary> /// static作用于应用程序整个运行周期, /// 只要服务器端的应用程序不重启,static的值一直存在内存。 /// </summary> private static Dictionary<Guid, object> dictSession = new Dictionary<Guid, object>(); /// <summary> /// 添加一个Session键值对 /// </summary> /// <param name="id"></param> /// <param name="value"></param> public static void AddToSession(Guid id, object value) { dictSession.Add(id, value); } /// <summary> /// 是否包含此Session Id /// </summary> /// <param name="id"></param> /// <returns></returns> public static bool IsHaveSession(Guid id) { return dictSession.ContainsKey(id); } /// <summary> /// 根据Session Id获取Session值 /// </summary> /// <param name="id"></param> /// <returns></returns> public static object GetSession(Guid id) { if (dictSession.ContainsKey(id)) { return dictSession[id]; } return null; } } }
登录页面:
public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 从客户端请求中获取用户名和密码 string strUserName = Request["username"]; string strPwd = Request["password"]; if (!string.IsNullOrEmpty(strUserName) && !string.IsNullOrEmpty(strPwd)) { // 创建一个Guid编号 Guid guid = Guid.NewGuid(); LoginInfo lInfo = new LoginInfo(strUserName,strPwd); // 将编号和对应的值写到服务器内存中。 SessionMgr.AddToSession(guid, lInfo); // 将Guid编号写到客户端浏览器中, // 这样在别的地方才能读取这个Session_Id, // 然后根据Session_Id获取Session值 Response.SetCookie(new HttpCookie("Session_Id", guid.ToString())); Response.Redirect("PostForm.aspx"); } } }
跳转页面:
public partial class PostForm : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 从客户端请求中获取Cookie名称为Session_Id的Cookie。 HttpCookie cookie = Request.Cookies["Session_Id"]; if (cookie != null) { // 得到Cookie中存储的Session_Id的值。 Guid guid = new Guid(cookie.Value); // 是否在服务器端有对应的值 if (SessionMgr.IsHaveSession(guid)) { // 从服务器端获取到Session_Id对应的值 LoginInfo lInfo = (LoginInfo)SessionMgr.GetSession(guid); Response.Write("您的登录名是:" + lInfo.UserName+"登录密码:"+lInfo.Password); } else { Response.Redirect("Default.aspx"); } } else { Response.Redirect("Default.aspx"); } } }
相关文章推荐
- Http状态的传递和保存 之 Cookie
- c实现的iOS http下载类。支持自己设定http 头(比如cookie等)
- jmeter Http cookie 管理器初识 传递登录状态至后面接口
- c实现的iOS http下载类。支持自己设定http 头(比如cookie等)
- 使用cookie保存用户的登录状态——初步实现
- Http状态的传递和保存
- cookie保存登陆状态实现
- ASP.NET如何实现服务器端身份验证和客户端状态管理?(Session机制和Cookie)
- 使用cookie实现登录状态的保存及判定
- Http状态的传递和保存 之 ASP.NET内置Session
- 使用cookie保存用户的登录状态——初步实现
- Http状态的传递和保存 之 通过Url传递
- Http状态的传递和保存 之 Application
- Http状态的传递和保存 之 几种数据传递的区别和不同用途
- Servlet--保存cookie实现保存用户登录状态
- Http状态的传递和保存 之 隐藏字段
- android实现http中请求访问添加cookie的方法
- asp.net利用cookie保存用户密码实现自动登录的方法
- HTTP状态管理机制之Cookie(转)
- jsp实现数据传递和保存