session默认配置是关闭浏览器失效.对于B.php页面产生的session,关闭页面B.php是不会失效的.所以,你要想办法制定策略,或者在B.php里使用之前清除上一个页面的session或者在A.php里清除.

解决方案 »

  1.   

    如果你A B两个页面在同一个站点内的话,恐怕不好实现,除非是页面关闭的时候再向服务器发送一个清除session的请求。
    因为,在同一个站点内,如果不是主动要求,一般情况下是20分钟(默认设置)内无活动后,自动清除session。并且如果页面完全被关闭的时候,整站session才会集体失效。(使用程序清除指定的session除外)
    而你关闭某一个页面,这个动作是在客户端发生的,服务器端并不知道。所以服务器端并不能主动去清除某一个session。只有当页面被关闭的时候,由js捕获取这个动作,然后向服务器端发送一个清除session的请求,服务器端才可以清除。具体使用winow.onbeforeunload事件来判断是否关闭,来决定是否向服务器发送清除session的请求。
    这种方法还是有一定的弊端的,因为这个文档卸载的事件,有两种情况都可以触发。
    1、页面被关闭(正常)
    2、页面被刷新(不正常)
    为什么页面被刷新的时候不正常?因为如果页面被刷新的时候,你也向服务器端发送了清除session的请求,那就有违你的本意了。所以这个时候你还要判断当前是刷新页面,还是关闭页面。这个判断,在ie7以下还是好判断的,但在ie7以上(包括ie7)和firefox等其它标签式浏览器中,是不好判断的(至少目前我没有办法判断)。在ie6中,一个窗口被关闭,是先把窗口移到屏幕之外后,再关闭的,这时候,你可以根据窗口的位置判断是否是关闭还是刷新(或许不太准确,你可以baidu一下,应该有你满意的结果)。
      

  2.   

    个人看法:
    1. 感觉楼主的思路有点问题。一般的做法是a和b两个页面有不同的操作权限act_a,act_b,登陆用户user1拥有权限act,程序判断act和act_a、act_b之间的关系就可以了。
    2. “关闭页面”--这个问题很难判断,用户可能是鼠标点击关掉了,也有可能是alt+f4关掉,更有可能直接关电源,或者说点了楼主在页面里面的“关闭窗口”按钮。目前通用的做法是:如果用户点击“关闭窗口”按钮来关掉页面,可以在程序里来处理清掉session,否则其它异常退出,应该通过其它措施来实现,比如每隔15分钟检测用户是否在线,如果不在线,就清掉session等。
    另外,session保存时间在php配置文件中可以修改的,默认的是关掉浏览器session就清掉了!
      

  3.   

    这个有什么意义?
    是说看完B.php或a.php以后就不能再看这页了吗?可以用权限思路,设a页的权限,B页的权限和其他页的权限就行了有权限的可以看,可以看的多,没有权限的就只能看部分的
    如果看完后就清楚,可以在页中先检查session,如果存在,则显示内容,在显示代码后,用代码清除
      

  4.   

    session存在于服务器端,并不是把页面或者浏览器关了session就会自动清掉,做梦。
      

  5.   

    <script type="text/javascript">
    if (document.all) {    
        attachEvent("onload",chkOnLoad);//在页面增加初始话   
        window.attachEvent("onunload",SaveResult);//在页面增加关闭页面响应函数   
        window.attachEvent("onbeforeunload",ConfirmOut);//在页面增加在关闭前的提示函数   
    }    
    else {   
        window.addEventListener("onload", chkOnLoad, false);    
        window.addEventListener('onunload', SaveResult, false);    
        window.addEventListener('onbeforeunload', ConfirmOut, false);    
    }   
      
    /*  
    页面初始话函数  
    */  
    function chkOnLoad(){   
    }   
      
    /*  
    关闭页面的时候提示  
    */     
    function ConfirmOut()   
    {   
        event.returnValue="关闭本窗口将结束对话,是否关闭?";      
           
    }      
      
    function SaveResult(){   
           

    </script>