您的位置:首页 > 理论基础 > 计算机网络

Http状态的传递和保存 之 自己实现“服务器端Cookie”

2014-02-17 23:05 429 查看
Cookie不能存储机密数据。如果想存储数据,可以保存一个Guid到Cookie中,

然后在服务器中建立一个以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");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: