asp.net和php中用window.open打开的窗口session丢失的解决办法
来源:互联网 发布:淘宝卖家引流软件 编辑:程序博客网 时间:2024/06/05 14:53
SOURCE:http://www.cnblogs.com/suimengsiqu/archive/2008/11/07/1329087.html
asp.net和php中用window.open打开的窗口session丢失的解决办法
希望对那些正好遇到此问题的人有点帮助。下面是asp.net的源代码,可以下载.
window.open虽然很不讨人喜欢,但它有时候又有一定的用处,现在很多办公自动化系统(OA),
为了给用户更大的操作空间,都在用户登陆以后用window.open打开一个只有标题栏的窗口。
但是在open出来的窗口中,却找不到在登陆窗口产生的session了。
一:在asp.net中的解决办法:
1:假若登录窗口为default.aspx,我们在后台可以这样写:
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:
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丢失,用的也是同样的办法,并且还更简单,只需两个函数就搞定了,
$sid=session_id();
session_id这个函数就是取得登陆界面的SessionID。
2:然后我们就可以想在.net中一样,根据这个SessionID构造一个Session:
session_id($sid);
session_start();
Session_id这个函数就是重新构造Session。
Kevan: 用COOKIE不就可以了吗?
--------------------------------------------------------
可以使用COOKIE来传值~
--------------------------
楼主这样的话,就有大问题了,我如果想要一个admin 的Session,岂不是可以修改url中的Sid就行了?(用cookie一样可以修改)。
浪费别人的时间,真是服了。
sunnychen: 莫名其妙的问题,以后少把这个莫须有的问题放在首页了 。
浪费别人的时间,真是服了。
--------------------------------------------------------
谢谢批评,但你试过没有,这个问题确实莫名其妙,但也确实存在。
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
suim: --引用--------------------------------------------------
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
--------------------------------------------------------
1、session保存在服务器,不存在得不到的情况,除非过期了,你可以打开trace观察
2、cookie只要不过期,若该cookie是域名www.domain.com产生,那么该域名下所有http请求都将发送该cookie到服务器
我更相信是其他的问题导致了你所说的弹出窗口session丢失的问题,希望楼主深入研究一下
谢慧琦: --引用--------------------------------------------------
suim: --引用--------------------------------------------------
老爷夏: 怎么可能找不到sessionid,楼主这个问题根本就不应该产生
--------------------------------------------------------
window.open打开才窗口是得不到登陆窗口的session的,
你可以试试。
--------------------------------------------------------
1、session保存在服务器,不存在得不到的情况,除非过期了,你可以打开trace观察
2、cookie只要不过期,若该cookie是域名www.domain.com产生,那么该域名下所有http请求都将发送该cookie到服务器
我更相信是其他的问题导致了你所说的弹出窗口session丢失的问题,希望楼主深入研究一下
不知道你试过吗??
试过了再说,
这个问题确实是存在的.
只不过楼上几位没注意而已.
我觉得楼主这样做是不妥的,应该还有更好的方法
小提示:此session非彼session
- asp.net和php中用window.open打开的窗口session丢失的解决办法
- asp.net和php中用window.open打开的窗口session丢失的解决办法
- 模式窗口window.open造成Session丢失的解决方法
- 【转】模式窗口window.open造成Session丢失的解决方法
- ASP.Net中session丢失的解决办法
- asp.net Session丢失的解决办法小结
- IE中用window.open() 新开页面,有时会丢失Session 的问题。
- IE中用window.open() 新开页面,有时会丢失Session 的问题
- 模式窗口window.open造成Session丢失
- asp.net中 session的丢失解决办法(2)
- asp.net使用session丢失问题的解决办法
- asp.net使用session丢失问题的解决办法
- 关于javascript 中用window.open()打开多个窗口的问题
- JavaScript打开窗口函数(Window.Open)使用详解、绝对路径与相对路径的获取与转换(含ASP.NET)
- JavaScript打开窗口函数(Window.Open)使用详解、绝对路径与相对路径的获取与转换(含ASP.NET)
- JavaScript打开窗口函数(Window.Open)使用详解、绝对路径与相对路径的获取与转换(含ASP.NET)
- window.open 打开窗口的参数详解
- 使用window.open()打开新的窗口
- Asp.net中如何过滤html,js,css代码
- 回归通讯
- 今天开始写blog
- js操作视频控件相关资料
- libsvm使用(续)
- asp.net和php中用window.open打开的窗口session丢失的解决办法
- 用mdadm管理软件RAID
- Ext.data.Store
- Head First C# 中文版 图文皆译 第十一章 事件和代理 page503
- 解决eclipse搭建索爱sdk模拟程序时出现的"Couldn`t load zayitlib.dll library"问题
- 单元测试==低成本运行代码
- VC++中MFC窗口对象的清除
- webclient
- 爱,经不起等待