.net 1.1 父页面在按钮事件中写入Session,然后js方式打开子页面,在子页面中读取session,但是读取的时候,有时session存在,有时不存在,很是费解。而且调试模式下经过反复测试是没问题的,发布到正式服务器就会出现这个问题。
代码如下:父页面按钮事件:
Session["arr"] = arr;//arr是一个构造好的ArrayList
Response.Write("<script>window.open('Plan.aspx', '_blank');</script>");
按钮事件结束子页面:
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
this.DataBind();
if (Session["arr"] != null)
{
ArrayList arr =(ArrayList)Session["arr"];
}
}
}读取的时候,有时session存在,有时不存在,很是费解。还有更奇怪的问题,测试发现,如果父页面打开子页面的时候,session没有读取到,那么刷新子页面,就可以读取到;于是我怀疑是session写入延时(当然,这个想法是逼不得已的白痴想法),导致第一次没有读取到,于是在第一次读取不到的时候,将进程睡眠3秒,然后再次尝试读取,还是无法取到,仍然是刷新页面就有了...我跟踪了两个页面的,父子页面的SessionID相同。
因为必须要打开新窗口,所以Server.Transfer和Response.Redirect都无法使用,请各位高人指点一二,不胜感激!
代码如下:父页面按钮事件:
Session["arr"] = arr;//arr是一个构造好的ArrayList
Response.Write("<script>window.open('Plan.aspx', '_blank');</script>");
按钮事件结束子页面:
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
this.DataBind();
if (Session["arr"] != null)
{
ArrayList arr =(ArrayList)Session["arr"];
}
}
}读取的时候,有时session存在,有时不存在,很是费解。还有更奇怪的问题,测试发现,如果父页面打开子页面的时候,session没有读取到,那么刷新子页面,就可以读取到;于是我怀疑是session写入延时(当然,这个想法是逼不得已的白痴想法),导致第一次没有读取到,于是在第一次读取不到的时候,将进程睡眠3秒,然后再次尝试读取,还是无法取到,仍然是刷新页面就有了...我跟踪了两个页面的,父子页面的SessionID相同。
因为必须要打开新窗口,所以Server.Transfer和Response.Redirect都无法使用,请各位高人指点一二,不胜感激!
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=192.168.1.1;database=ASPState;uid=sa;pwd=sa;" timeout="60" > </sessionState>
allowCustomSqlDatabase="true" 如果要指定数据库必须设此属性为true; 再配置数据库,如下 1对脚本称为InstallSqlState.sql和UninstallSqlState.sql。它们创建一个称为ASPState的数据库和几个存储过程。然而,数据存储在两个属于TempDB数据库的表中。在SQL Server中,TempDB为临时表、临时的存储过程和其他临时的工作存储需求提供了存储区。这表明,如果SQL Server机器重新启动,则会话数据被丢失。 第2对脚本称为InstallPersistSqlState.sql和UninstallPersistSqlState.sql。在这种情况下,也是创建一个ASPState数据库,但是其中的表是持久性的,因为它们在相同的数据库内创建。所有的脚本都位于如下路径中:
%SystemRoot%\Microsoft.NET\Framework\[version]
谢谢fuda_1985兄的意见,由于这是一个老项目,而且是核心系统,非常重要,修改网站整体的session策略,风险太大,阿门
现在看起来不是session丢失导致,因为我刷新子页面还是可以取到的
我的.net 2.0 ,自己的服务器,后台和前台保存用户信息都是用Session, 丢失的情况极少。
如果是自己的服务器可以适当延长Session的保存时间哦。
可以像4楼说的那样!
也可以<sessionState mode="StateServer" cookieless="false" timeout="60"/>
我在父页面中点击按钮马上跳转到子页面,这个过程应该不会session丢失,而且刷新子页面仍然可以取到session,注意,我只刷新了子页面,并没有重写session,这说明在刷新的时候session是可以获取的,只是跳转时,第一次加载有可能取不到session。
你放到真正的服务器上,N多人用,压力大,资源回收频繁,session在很短时间内就失效.建议用其它的方法,舍弃session
或者按照我上面说的,或者使用Cookie。
总之Session丢失很常见了