asp.net和php中用window.open打开的窗口session丢失的解决办法

SOURCE:http://www.cnblogs.com/suimengsiqu/archive/2008/11/07/1329087.html

asp.net和php中用window.open打开的窗口session丢失的解决办法

 

希望对那些正好遇到此问题的人有点帮助。下面是asp.net的源代码,可以下载.

window.open打开窗口Session丢失

 

window.open虽然很不讨人喜欢,但它有时候又有一定的用处,现在很多办公自动化系统(OA),

为了给用户更大的操作空间,都在用户登陆以后用window.open打开一个只有标题栏的窗口。

但是在open出来的窗口中,却找不到在登陆窗口产生的session了。

 

一:在asp.net中的解决办法:

1:假若登录窗口为default.aspx,我们在后台可以这样写:

1  string  user  =  Request.Form[ " user " ];
2  Session[ " _uid " =  user;
3  string  sid  =  Session.SessionID;
4  Page.RegisterStartupScript
5  ( " open " , " <script>
6  window.open
7  ( ' index.aspx?sid="+sid+" ' , ' _blank ' , ' status=yes,scrollbars=yes,resizable=yes ' );
8  </ script > " );
9 

 这样我们就可以把SessionID传递到新打开的窗口index.aspx中,我们在index.aspx中就可以根据这个SessionID

重新构造一个Session。

 2:在index.aspx中我们可以这样来重新构造session:

 1  using  System.Web.SessionState;
 2 
 3  public   partial   class  index : System.Web.UI.Page
 4  {
 5       protected   void  Page_Load( object  sender, EventArgs e)
 6      {
 7           string  sid  =  Request.QueryString[ " sid " ].ToString();
 8          SessionIDTest ss  =   new  SessionIDTest(sid);
 9          ss.CreateSessionID(Context);
10      }
11  }
12 
13  public   class  SessionIDTest : SessionIDManager
14  {
15       private   string  sid;
16       public  SessionIDTest( string  sid)
17      {
18           this .sid  =  sid;
19      }
20       public   override   string  CreateSessionID(HttpContext context)
21      {
22           return  sid;
23      }
24 
25  }

 其中我们用到了SessionState命名空间下的SessionIDManager类,我们通过重写它的CreateSessionID

这个虚方法来重新或得Session。CreateSessionID这个虚方法需要我们重写,它返回的就是一个新的Session

的SessionID,而这个SessionID就是从登陆界面default.aspx中传递过来的,所以我们可以认为新构造的

Session和登陆窗口的Session是一个Session。

 

 二:在php中的解决办法:

1:在php中解决这个sesssion丢失,用的也是同样的办法,并且还更简单,只需两个函数就搞定了,

session_start ();
$sid = session_id ();

session_id这个函数就是取得登陆界面的SessionID。

 

 2:然后我们就可以想在.net中一样,根据这个SessionID构造一个Session:

$sid = $_GET [ ' sid ' ];

session_id($sid); 

session_start();

 Session_id这个函数就是重新构造Session。


 

posted @ 2008-11-07 19:43 suim 阅读(1085) 评论(15)   编辑 收藏 网摘 所属分类: asp.net

   回复   引用   查看     
#1楼  2008-11-07 21:08 | 肥仔鱼       
非常感谢,这几天正在搞系统集成,正用的上呢,谢谢
   回复   引用   查看     
#2楼  2008-11-07 21:50 | 谢慧琦       
怎么会出现这种事情呢?
   回复   引用   查看     
#3楼  2008-11-07 22:01 | Kevan       
用COOKIE不就可以了吗?
   回复   引用   查看     
#4楼  2008-11-07 23:15 | Mien       
--引用--------------------------------------------------
Kevan: 用COOKIE不就可以了吗?
--------------------------------------------------------
可以使用COOKIE来传值~



--------------------------
楼主这样的话,就有大问题了,我如果想要一个admin 的Session,岂不是可以修改url中的Sid就行了?(用cookie一样可以修改)。

   回复   引用     
#5楼  2008-11-08 03:25 | tenRMB [未注册用户]
这样治标不治本吧,而且有危险。
   回复   引用     
#6楼  2008-11-08 09:25 | 老爷夏 [未注册用户]
怎么可能找不到sessionid,楼主这个问题根本就不应该产生
   回复   引用     
#7楼  2008-11-08 09:51 | sunnychen [未注册用户]
莫名其妙的问题,以后少把这个莫须有的问题放在首页了 。
浪费别人的时间,真是服了。
   回复   引用   查看     
#8楼  [ 楼主]2008-11-08 10:03 | suim       
--引用--------------------------------------------------
sunnychen: 莫名其妙的问题,以后少把这个莫须有的问题放在首页了 。
浪费别人的时间,真是服了。
--------------------------------------------------------
谢谢批评,但你试过没有,这个问题确实莫名其妙,但也确实存在。
   回复   引用   查看     
#9楼  [ 楼主]2008-11-08 10:04 | suim       
--引用--------------------------------------------------
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
   回复   引用   查看     
#10楼  2008-11-08 12:03 | 谢慧琦       
--引用--------------------------------------------------
suim: --引用--------------------------------------------------
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
--------------------------------------------------------
1、session保存在服务器,不存在得不到的情况,除非过期了,你可以打开trace观察
2、cookie只要不过期,若该cookie是域名www.domain.com产生,那么该域名下所有http请求都将发送该cookie到服务器

我更相信是其他的问题导致了你所说的弹出窗口session丢失的问题,希望楼主深入研究一下
   回复   引用   查看     
#11楼  2008-11-08 12:11 | D       
如果没有一次用到过Session保存信息,所以,每个页面的SessionID会不时的变化,当用Session[key]=value保存过一个Session之后,其它的页面中的SessionID就不会再变化了
   回复   引用   查看     
#12楼  2008-11-08 13:53 | Martin(高超)       
使用.net的cookie身份验证很好控制.简单测试过.没有发现非安全问题.
   回复   引用     
#13楼  2008-11-08 14:46 | onlyone [未注册用户]
some times I use window.open(), The session will dispose.
   回复   引用   查看     
#14楼  [ 楼主]2008-11-08 18:14 | suim       
--引用--------------------------------------------------
谢慧琦: --引用--------------------------------------------------
suim: --引用--------------------------------------------------
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
--------------------------------------------------------
1、session保存在服务器,不存在得不到的情况,除非过期了,你可以打开trace观察
2、cookie只要不过期,若该cookie是域名www.domain.com产生,那么该域名下所有http请求都将发送该cookie到服务器


我更相信是其他的问题导致了你所说的弹出窗口session丢失的问题,希望楼主深入研究一下
不知道你试过吗??
试过了再说,


这个问题确实是存在的.

只不过楼上几位没注意而已.

我觉得楼主这样做是不妥的,应该还有更好的方法


小提示:此session非彼session
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值