在页面加载后清除PHP会话

时间:2014-01-17 02:09:49

标签: php internet-explorer

我正在开发一个网站,其中包含用户必须登录的“我的帐户”部分。我在用户登录后将基本信息存储在会话中。

我在Chrome或Firefox中没有问题。但是,在IE 8中我登录,它重定向到主后台页面。它会加载,但会话结束后立即加载。我通过在session_start()之后打印会话然后在页面的末尾再次测试了这个。页面加载时,所有信息都在那里。如果我打开一个单独的页面并立即打印出会话,它已经被清除。同样,只有在IE中才会发生这种情况。

这里有什么我想念的吗?

CODE

这是所有帐户页面上的代码。

    <?php
require_once('inc_session.php');
require_once('bo_session_check.php');

?>

在登录的页面(backoffice.php)中,唯一一次使用会话的时间是读取它以确定此人登录的帐户类型,例如:

 <?php if($_SESSION['user_type']=='member'){?>

inc_session.php的代码

    <?php

if(!isset($_SESSION['is_mobile'])){

$mobile_browser = '0';

    if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
        $mobile_browser++;
    }

    if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
        $mobile_browser++;
    }    

    $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
    //echo $_SERVER['HTTP_USER_AGENT'];
    $mobile_agents = array(
        'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
        'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
        'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
        'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
        'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
        'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
        'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
        'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
        'wapr','webc','winw','winw','xda ','xda-');

    if (in_array($mobile_ua,$mobile_agents)) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini') > 0) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'ipad') > 0) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows') > 0) {
        $mobile_browser = 0;
    }

    if ($mobile_browser > 0) {
       $_SESSION['is_mobile']='yes';
    }
    else {
       $_SESSION['is_mobile']='no';
    }   


}

/* TURN MOBILE SITE OFF */
//$_SESSION['is_mobile']='no';


$page=strtok($_SERVER["REQUEST_URI"],'?');
if(substr($page, 0, 3)!="/m/" && $_SESSION['is_mobile']=='yes' && substr($page,-3) =='php'){
    if( isset($_SERVER['HTTPS'] )  && $_SERVER['HTTPS'] != 'off' ){
            $heading='https://';
        }else{
            $heading='http://';
        }
   header("Location: " . $heading . $_SERVER["SERVER_NAME"] . "/m" . $_SERVER["REQUEST_URI"]);
   exit();

}


$page=substr($page, strrpos($page, '/', -1));
$ssl_pages=array('/backoffice.php', '/login.php', '/login-partner.php', '/checkout.php', '/checkout_member.php', '/membership.php', '/partner.php');



if(in_array($page, $ssl_pages) || substr($page, 0, 3)=='/bo'){
    if($_SERVER[HTTP_HOST]!='domain.com'){
        header("Location: https://domain.com" . $_SERVER["REQUEST_URI"]);
    }elseif($_SERVER["HTTPS"] != "on") {
       header("HTTP/1.1 301 Moved Permanently");
       header("Location: https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
       exit();
    }
}else{
    if($_SERVER["HTTPS"] == "on"){
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
        exit();
    }
}



ini_set("session.cookie_domain", "domain.com");





session_start();




?>

这是bo_session_check.php         

if(isset($_SESSION['agreed']) && $_SESSION['agreed']!="yes" && $_SESSION['admin']!="yes"){
    /*
    DEPRECIATED
    header("location: bo_terms.php");
    exit();
    */
    $_SESSION['agreed']="yes";
}elseif(isset($_SESSION['user_id']) && $_SESSION['user_id']!=""){
    /*ALL GOOD*/
}else{
    /*YOU GOTTA GO*/    
    header("location: login.php");
    exit();
}

?>

这是PHP会话信息 PHP Session Info

2 个答案:

答案 0 :(得分:0)

由于$ _SESSION是在服务器端处理的 - 这意味着在IE8中禁用了cookie -

答案 1 :(得分:0)

您有session.use_only_cookies = On,这很好,但请注意,关闭Cookie的任何人都无法正常加载您的网站。

然而,这是导致问题的原因。

来自其他 StackOverflow answer

  

在开始会话之前尝试添加 [PHP代码] - 这将确保会话cookie在浏览器关闭之前不会过期。

session_set_cookie_params(0);

希望这有助于解决您的问题。最糟糕的情况是,通过页面加载和重定向之间的URL传递SESSION ID(SID)。关于传递会话ID的PHP手册中的 Refer to this page 。你必须通过你拥有的Location: http://URL来做到这一点。