/// <summary> ///BasePage 的摘要说明 /// </summary> public class BasePage : System.Web.UI.Page { private string _UserId; //帐号 public string UserId { get { return _UserId; } set { _UserId = value; } } protected override void OnInit(EventArgs e) { base.OnInitComplete(e); } public BasePage() { // //TODO: 在此处添加构造函数逻辑 // // 获取域名 string strDomain_UserName = Page.User.Identity.Name.Trim(); int intSeparate_Index = strDomain_UserName.LastIndexOf(@"\"); UserId = strDomain_UserName.Substring(intSeparate_Index + 1).ToLower(); } //验证登陆是否超时 protected void CheckSysLogin() { if (Request.Cookies["UserId"] == null || LoginUser.UserId == null) { UserInfo pUserInfo = new SysBLL.GetLoginUserModel(UserId); LoginUser.UserId = pUserInfo.UserId; LoginUser.UserName = pUserInfo.UserName; Response.Cookies["UserId"].Value = pUserInfo.UserId; } } }
其中LoginUser的属性都是static的string类型
/// <summary>
/// 登陆用户信息类
/// </summary>
public class LoginUser
{
// 用户的ID属性
public static string UserId
{
set
{
HttpContext.Current.Session["UserId"] = value;
}
get
{
if (HttpContext.Current.Session["UserId"] != null)
{
return HttpContext.Current.Session["UserId"].ToString();
}
else
{
return null;
}
}
}
每次页面都是继承这个对象,然后在PageLoad调用
CheckSysLogin方法去判断和赋值
我的疑问主要在LoginUser这个对象 他下面的属性既然是static属性 ,那多个用户访问这个属性值是否共用还是分开的啊?
公用.
先把语法学好,刚入门别想这些有的没的.语法书里说的很清楚.静态成员就是同一个.
/// <summary> /// 登陆用户信息类 /// </summary> public class LoginUser { // 用户的ID属性 public static string UserId { set { HttpContext.Current.Session["UserId"] = value; } get { if (HttpContext.Current.Session["UserId"] != null) { return HttpContext.Current.Session["UserId"].ToString(); } else { return null; } } }
我忘记放LoginUser的代码了 目前这个系统一直是在企业用 用户量也不少 应该没有出错吧
@犇牛牛: 这个是没问题的.
@吴瑞祥: 我是有点懵逼了,为什么在static属性里面 可以调用HttpContext.Current
难道他就不会出现冲突吗?能否稍微解释一下呢?
@犇牛牛: 你知道HttpContext.Current 是啥吗?然后HttpContext.Current.Session是啥?
@吴瑞祥: 当前请求的上下文 ,我觉得应该是一个实例 (HTTP请求实例,包含Request,Response等)
那HttpContext如果是静态对象 怎么能获取到当前实例呢?
首先 你要明白asp.net本身就是多线程的 每次处理客户端的一个请求都是个新的线程 每个这样的线程都会创建一个HttpContext对象 而HttpContext.Current是一个属性 不是字段 他是有get访问器的 (你可以转到定义自己看看定义 想看源代码自己百度) 这个访问器中的代码就能获取到你这次处理的请求的线程中的那个HttpContext对象 之所以写成静态的只是方便你调用而已