2014-12-04 49 views
3

我在session_id()上遇到问题,每次在浏览器刷新/重新启动时都会返回一个新值。PHP session_id在刷新时重新生成

阅读此篇here但它并没有解决issue.I做过的一切提到有 - 浏览器接受cookie,权限设置是否正确,没有参数值的方式是在连续的请求改变等

莫非这被称为不正确使用session_name()session_set_cookie_params()?或者,也许这是应该进行微调的初始配置?

public static function init_session($name = FALSE, $lifetime = 10, $path = '/', $domain = FALSE, $secure = FALSE) 
{ 
    if (empty($name)) 
    { 
     $name = APP_NAME; 
    } 

    if (empty($domain)) 
    { 
     $domain = BASE_URL; 
    } 

    session_name($name); 

    session_set_cookie_params($lifetime, $path, $domain, $secure, TRUE); 

    session_start(); 

    echo session_id(); 
} 
+0

我想你贴错了链接,我没有看到相对于CSS3问题。 – 2014-12-04 09:07:32

+0

@MarcelBurkhard对不起,现在修复。 – sitilge 2014-12-04 09:09:41

+0

注释对'session_name()'和'session_set_cookie_params()'的调用,看它是否有效。如果有效,则取消注释两个电话中的一个,再次检查等等。当它停止工作时,你已经找到了问题。 – axiac 2014-12-04 09:16:46

回答

1

首先,您将会话有效期10秒,这意味着你每10秒后,一个新的会话。

备注:某些浏览器在关闭浏览器时丢弃会话cookie属于正常行为。

如果您需要将会话扩展到多个浏览器会话,则需要使用永久性Cookie

例子:

function init_session(/* ... */) 
{ 
    if(!isset($_SESSION)) { 
     session_start(); 
    } 
    //Is it a running session? 
    if(isset($_SESSION['somevalue'])) { 
     //Everything is fine, session is loaded, no need to reload from cookies 
    } else { 
     if(isset($_COOKIE['yourcookiename'])) { 
      //reload session from cookie 
     } else { 
      create_session(); 
     } 
    } 
} 

function create_session() 
{ 
    $_SESSION['somevalue'] = 1; 
    //setcookie 
} 

http://www.allaboutcookies.org/cookies/cookies-the-same.html

+2

副作用:浏览器本身不会关闭会话,因为在关闭页面选项卡时,浏览器不会与服务器通信。关闭本身在超时后发生在服务器端(因此,当用户的浏览器没有请求X秒时,会话关闭)! – Sliq 2014-12-04 09:28:22

+0

@Sliq thx,我相应地更改了我的答案 – 2014-12-04 09:30:56

+0

@MarcelBurkhard是的,但即使时间间隔较短,session_id也会在每个请求中更改。不知何故,'生存时间'被忽视。 – sitilge 2014-12-04 09:42:09