一个纠结的问题--session

chokochu 2012-09-20 08:55:22
网站里有个页面,a.aspx,
这个页面里要用到一个session["a"],
a.aspx被首次加载的时候, session["a"]会被清空,
在a.aspx上做的各种操作, 都会记录在这个session中,
但是, 如果在同一个浏览器里, 打开第二个a.aspx, 因为session被清空了,
所以, 再在第一个a.aspx里操作的时候, 就会报空指针异常.

要求:
1.这个session一定要用
2.页面首次加载session一定要清空
因为这个页面十分复杂, 所以要尽可能用最小的改动来解决问题,
各位大侠有何高见?
...全文
204 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
chokochu 2012-09-20
  • 打赏
  • 举报
回复
结贴了, 大家洗洗睡吧.
laoyingisme 2012-09-20
  • 打赏
  • 举报
回复
说的云里雾里,用ViewState吧,它的周期和页面一样,只有不关掉页面值就存在
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

自定义控件viewstate是能够共享的,viewstate是画面区分的,不是控件区分的
数据不跨页面就不该用session
如果你非要用session,session你什么时机给他清空?session资源是共享的,既然不想共享就考虑用其他方式保存,或者不准许两个画面同时打开
[/Quote]

这个问题很矛盾, 因为这个页面很大, 加载完毕就需要1分钟的时间(其实页面上的viewstate已经很大了),session中的数据量同样也很大, 如果放在viewstate中页面会变的跟大, viewstate可能在一般情况下是画面共享的, 可是我们所用页面使用了大量的updatepannel, 我们试过, viewstate确实不能正常工作
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

大约2万多行吧,?

你2万多行都有问题?
这就是你的态度?
[/Quote]

我修改一下我的态度, "大约2行多吧"
这次态度可以吗?
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

!Page.IsPostBack

如果在同一个浏览器里, 打开第二个a.aspx

不是又执行了session["a"]=null;

出现你问题的结果是完全正确的。

你都没有判断出“首次”是什么含义


大约2万多行吧,?

你2万多行都有问题?
这就是你的态度?
[/Quote]

看来您是一位老者, 因为一般说别人态度问题的都是老者, 如果您认为我态度有问题, 我真心的道歉, 我甚至可以向全体CSDN网友保证, 我一定不会再得罪老人家了.

但是, 也请您不要总是评价别人的态度问题, 甚至上升到教养问题, 因为你们这样的口吻, 让年轻人很反感, 作为一个老人家, 完全可以用更加谦逊的态度表达您的不满.
孟子E章 2012-09-20
  • 打赏
  • 举报
回复
!Page.IsPostBack

如果在同一个浏览器里, 打开第二个a.aspx

不是又执行了session["a"]=null;

出现你问题的结果是完全正确的。

你都没有判断出“首次”是什么含义


大约2万多行吧,?

你2万多行都有问题?
这就是你的态度?
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 12 楼 的回复:

引用 11 楼 的回复:
页面首次加载session一定要清空?
你是怎么清空的?

一定要清空, session["a"]=null;


如果在同一个浏览器里, 打开第二个a.aspx
你是怎么判断首次的?

!Page.IsPostBack

"我问的问题没有几次能得到答案的"
导致这种结果的原因有几个,其中一个就是问题描述不清……
[/Quote]

你这有点太钻牛角尖了吧, 你希望你的页面报错吗? 所以, basically,我希望在第一个页面里操作的时候不报错.
最后我说"各位大侠有何高见?", 这明显是一个开放的问题, 我想要大家给我提供一种思路来应对这种情况,
比如我判断是否已经打开一个页面, 如果已经打开,那么打开第二个的时候我要提示用户"您已经打开了一个, 不能再开了", 我肯定要保住第一个已经操作半截的页面, 而不会让第二个刚打开的页面把用户之前的全部操作全部清空.

  • 打赏
  • 举报
回复
自定义控件viewstate是能够共享的,viewstate是画面区分的,不是控件区分的
数据不跨页面就不该用session
如果你非要用session,session你什么时机给他清空?session资源是共享的,既然不想共享就考虑用其他方式保存,或者不准许两个画面同时打开
yibey 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用 11 楼 的回复:
页面首次加载session一定要清空?
你是怎么清空的?

一定要清空, session["a"]=null;


如果在同一个浏览器里, 打开第二个a.aspx
你是怎么判断首次的?

!Page.IsPostBack

"我问的问题没有几次能得到答案的"
导致这种结果的原因有几个,其中一个就是问题描述不清楚,没代码

小弟向来以问题描……
[/Quote]


你真的描述清楚了么,我在提一个问题

但是, 如果在同一个浏览器里, 打开第二个a.aspx, 因为session被清空了,
所以, 再在第一个a.aspx里操作的时候, 就会报空指针异常.

这话你是想要2个页面处在session被清空的状态,还是不被清空的状态,还是第一个页面处在有session的状态,第二页面处在没有session的状态(注:这里强调的是出于那种状态下的效果,不是真的指session有没有)
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
页面首次加载session一定要清空?
你是怎么清空的?

一定要清空, session["a"]=null;


如果在同一个浏览器里, 打开第二个a.aspx
你是怎么判断首次的?

!Page.IsPostBack

"我问的问题没有几次能得到答案的"
导致这种结果的原因有几个,其中一个就是问题描述不清楚,没代码

小弟向来以问题描述详细而闻名, 想要代码也可以, 大约2万多行吧, 你要想要我发你邮箱
[/Quote]

谢谢
孟子E章 2012-09-20
  • 打赏
  • 举报
回复


页面首次加载session一定要清空?
你是怎么清空的?


如果在同一个浏览器里, 打开第二个a.aspx
你是怎么判断首次的?


"我问的问题没有几次能得到答案的"
导致这种结果的原因有几个,其中一个就是问题描述不清楚,没代码
chokochu 2012-09-20
  • 打赏
  • 举报
回复
看样子我还是得说每次发帖后要说的那句话: "我问的问题没有几次能得到答案的"
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

用之前判断一下,不就可以了吗?
[/Quote]

如果清空了, 那么已经打开的那个就不能用了, 如果不清空, 当么当前的这个页面就用的是老session里的数据
chokochu 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

在操作session的时候先判断呀。
再就是居然这些数据是本画面使用的为什么要存session,viewstate不行?
[/Quote]
这个页面嵌入了很多自定义控件, 之所以放在session里, 是想让数据在这些控件之间共享
o0_真诚_0o 2012-09-20
  • 打赏
  • 举报
回复
页面首次加载?

if (!Page.IsPostBack)
{

}

xuan.ye 2012-09-20
  • 打赏
  • 举报
回复
用之前判断一下,不就可以了吗?
zhujiazhi 2012-09-20
  • 打赏
  • 举报
回复
每次用seesion的时候先判断一下
第二次进入的时候判断当前有没有,如果有,可进行提示是否要清除
xdq025 2012-09-20
  • 打赏
  • 举报
回复
[code=C#]
if(Session["a"]!=null)
Session["a"]=null;
[/Code]
dahaizhiliang 2012-09-20
  • 打赏
  • 举报
回复
虽然不太明白需求,你可以试试隐藏域控件。暂时存储一下session的值
  • 打赏
  • 举报
回复
在操作session的时候先判断呀。
再就是居然这些数据是本画面使用的为什么要存session,viewstate不行?
加载更多回复(1)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧