我在每个aspx页面访问的单个静态类中处理用户数据的加载。我想在此过程中添加支持Cookie和Session的功能。但是,我发现Response.Cookies对象和Session对象都不能用于我的util类。
基本上,我现在拥有的是(在它自己的文件中):
namespace myProject
{
static class myUtil
{
public static myProject.User LoadUser()
{
//Look up user
}
}
}
我想做的是:
namespace myProject
{
static class myUtil
{
public static myProject.User LoadUser()
{
if (Session['user'] != null)
{ user = Session['user']; }
else if (Response.Cookies['user'] != null)
{ user = Response.Cookies['user']; }
else
{
//Look up user
}
}
}
}
我怎样才能实现这一目标?在当前实现中,对Session和Response.Cookies的所有引用都被视为未声明的对象。
作为参考,以下是该类的当前导入:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.Web.UI.Page;
using System.Web.UI.WebControls;
答案 0 :(得分:5)
课程文件中的课程
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
/// <summary>
/// Summary description for GetSessionHelper
/// </summary>
public class SessionHelper : IRequiresSessionState
{
public object GetSession(string key)
{
//check session
if (HttpContext.Current.Session[key] != null)
{
//return session value
return HttpContext.Current.Session[key];
}
else
{
//return empty string
return string.Empty;
}
}
}
课程档案中的Cookie
if (HttpContext.Current.Request.Cookies["CodeF"] != null)
{
string background = HttpContext.Current.Request.Cookies["CodeF"]["BackImage"].ToString();
}
答案 1 :(得分:2)
你可以使用HttpContext.Current.Session和HttpContext.Current.Request,但要注意Session在http管道的所有阶段都不可用,例如,如果使用HttpModule会话未在BeginRequest中分配
答案 2 :(得分:1)
静态HttpContext.Current
成员公开了大多数这些属性。请参阅:http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx
答案 3 :(得分:1)
您可以使用静态HttpContext.Current变量获取HttpContext中的任何内容。实际上并不推荐这样做 - 它将你的代码直接绑定到asp.net,并使得编写测试成为一种巨大的痛苦。通常,您可能希望使用更多可以传递依赖关系的实例类,例如您希望访问的会话变量。
答案 4 :(得分:1)
你应该像这样使用它, HttpContext.Current.Request.Cookies [ “用户”]