首页 新闻 会员 周边

.net 可能是session值问题。。。

0
悬赏园豆:20 [已解决问题] 解决于 2016-06-28 16:33

我现在的项目中,一个表单,其申请人是根据session中保存的用户名获得的。

现在出现这样的情况:在提交时,由于网络问题,导致提交功能未能完成且页面一直在加载中,现将窗口关掉。在次打开表单list页面,进入表单时,申请人会变成其他的数据,且表单中部分数据是我填写的,部分不是。问:什么原因?

PS:初步怀疑是session问题。。

kistliu的主页 kistliu | 初学一级 | 园豆:138
提问于:2012-10-11 17:23
< >
分享
最佳答案
0

你是用session保存用户名,再根据用户名去 获取表单List?

感觉不是session,关闭窗口是关闭浏览器了吗? 如果关闭浏览器了,应该session 用户名为空了;如果只是关闭一个选项卡,session 用户名还是原来的,没有变。

具体楼主可以调式一下,就知道问题在哪了。

收获园豆:10
Qlin | 老鸟四级 |园豆:2403 | 2012-10-11 17:42

不是  session保存的是userinfo实体,提交表单需要填写申请人(默认的是session中用户的值)

kistliu | 园豆:138 (初学一级) | 2012-10-11 17:45

@kistliu: 不用SESSION 来保存实体,这样你网络中断,或者什么情况,就会造成你说的那些原因,

 

             你提交的时候,用实体做什么呢?

 

            查询的时候才用实体!或者别的,插入的时候 用实体 是不是画蛇添足?

bug_tt | 园豆:234 (菜鸟二级) | 2012-10-11 17:51

@kistliu: 

session保存的是userinfo实体还是用户名都一样,session中的值 有没有变化,

变化了,肯定是其它地方赋值了;只是关闭窗口,不会改变session的

Qlin | 园豆:2403 (老鸟四级) | 2012-10-11 17:55

@黑色王子: 提交的时候,整张表单不只是一张表,不用实体难道直接用sql啊,而且这是个老系统,持久层就是用的EF,我能不用么。。。

kistliu | 园豆:138 (初学一级) | 2012-10-11 17:56

关键是现在不能重现这个问题啊,只是在客户那偶然出现得这个问题。。。

kistliu | 园豆:138 (初学一级) | 2012-10-11 17:58

@kistliu: 

不能重现,只能检查一下代码了,查找 CurrentUser属性引用,看看 哪里有赋值的地方,如果没有,那应该是 重新登录过了,导致凭证的Identity.Name发生变化

还有获取 list的方法

Qlin | 园豆:2403 (老鸟四级) | 2012-10-11 18:05
其他回答(2)
0

数据中断造成的,应该提交的时候用事物来回滚操作!

收获园豆:10
bug_tt | 园豆:234 (菜鸟二级) | 2012-10-11 17:34

提交的时候是用的事物来处理的,但是这里的问题是使用session中用户信息赋值的地方会出现莫名其妙的数据,这些数据根本不是我提交前填写的表单数据啊。。。。求助啊

支持(0) 反对(0) kistliu | 园豆:138 (初学一级) | 2012-10-11 17:39

@kistliu: 检查你赋值session的地方! 看看是否哪里写多了?

支持(0) 反对(0) bug_tt | 园豆:234 (菜鸟二级) | 2012-10-11 17:40

@黑色王子: 什么叫写多了??不懂哦。。

支持(0) 反对(0) kistliu | 园豆:138 (初学一级) | 2012-10-11 17:47

@kistliu: 

public static UserInfo CurrentUser
        {
            get
            {
                if (HttpContext.Current.Session["userInfo"] == null)
                {
                    string domainName = HttpContext.Current.User.Identity.Name;
                   

                    int index = domainName.IndexOf(@"\");
                    if (index > 0)
                    {
                        domainName = domainName.Remove(0, index + 1);
                    }
                    BREmployee emp = new BREmployee();
                    UserInfo user = emp.GetEmpByDomainName(domainName);
                    if (user.EmpID < 0)
                    {
                        throw new Exception("0004");
                    }
                    else
                    {
                        HttpContext.Current.Session["userInfo"] = user;
                    }
                    
                }
                return (UserInfo)HttpContext.Current.Session["userInfo"];
            }
            set
            {
                HttpContext.Current.Session["userInfo"] = value;
            }

这里就是session值设置的地方。。

支持(0) 反对(0) kistliu | 园豆:138 (初学一级) | 2012-10-11 17:53

@kistliu:   你用lock 试试!~

支持(0) 反对(0) bug_tt | 园豆:234 (菜鸟二级) | 2012-10-11 17:56

@黑色王子: lock?怎么用。。。我是菜鸟~~

支持(0) 反对(0) kistliu | 园豆:138 (初学一级) | 2012-10-11 18:01

@kistliu:  在你提交的地方用lock把代码包起来;

 

 lock(this)

{

  操作代码

}

支持(0) 反对(0) bug_tt | 园豆:234 (菜鸟二级) | 2012-10-11 18:02
0

今天看到还没结贴,特地回来结贴。问题不在这里。。。。

kistliu | 园豆:138 (初学一级) | 2016-06-28 16:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册