首页新闻找找看学习计划

这种方式继承Page类,然后用static变量是否会存在BUG?

0
悬赏园豆:5 [待解决问题]
/// <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属性 ,那多个用户访问这个属性值是否共用还是分开的啊?

犇牛牛的主页 犇牛牛 | 初学一级 | 园豆:31
提问于:2017-08-23 10:26
< >
分享
所有回答(2)
0

公用.

先把语法学好,刚入门别想这些有的没的.语法书里说的很清楚.静态成员就是同一个.

吴瑞祥 | 园豆:28675 (高人七级) | 2017-08-23 10:47
/// <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的代码了 目前这个系统一直是在企业用 用户量也不少 应该没有出错吧

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2017-08-23 11:02

@犇牛牛: 这个是没问题的.

支持(0) 反对(0) 吴瑞祥 | 园豆:28675 (高人七级) | 2017-08-23 11:04

@吴瑞祥: 我是有点懵逼了,为什么在static属性里面 可以调用HttpContext.Current

难道他就不会出现冲突吗?能否稍微解释一下呢?

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2017-08-23 11:28

@犇牛牛: 你知道HttpContext.Current 是啥吗?然后HttpContext.Current.Session是啥?

支持(0) 反对(0) 吴瑞祥 | 园豆:28675 (高人七级) | 2017-08-23 11:33

@吴瑞祥: 当前请求的上下文 ,我觉得应该是一个实例 (HTTP请求实例,包含Request,Response等)

那HttpContext如果是静态对象 怎么能获取到当前实例呢?

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2017-08-23 13:45
0

首先 你要明白asp.net本身就是多线程的 每次处理客户端的一个请求都是个新的线程 每个这样的线程都会创建一个HttpContext对象 而HttpContext.Current是一个属性 不是字段 他是有get访问器的 (你可以转到定义自己看看定义 想看源代码自己百度) 这个访问器中的代码就能获取到你这次处理的请求的线程中的那个HttpContext对象 之所以写成静态的只是方便你调用而已

Sugar★ | 园豆:203 (菜鸟二级) | 2017-08-24 21:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册