PHP会话变量无法在其他页面上访问

时间:2015-05-28 18:20:12

标签: php session

在浏览其他帖子后,我找不到答案。 问题是,当我创建自定义会话名称时,我无法访问任何其他页面上的会话变量。如何使用自定义会话变量?

情景A

登录页面

成功登录后,将调用以下内容

function initiatenewsession($app, $userid){
    $session_name = getuniquesessionid($app,$userid);   // Set a custom session name
    session_name($session_name);
    session_start();
    session_regenerate_id(true);
    $_SESSION["loggeduserid"] = $user_id;
    echo("1a)SESSION NAME[".session_name()."]");
    echo("1b)logged user[".$_SESSION["loggeduserid"]."]");
}

回声结果

  • 1a)会话名称[myappsessionid6520150528184534]

  • 1b)登录用户[65]

注册页面(用户在登录后点击链接)

session_start();
echo("2a)SESSION NAME[".session_name()."]");
echo("2b)logged user[".$_SESSION["loggeduserid"]."]");
  • 2a)会话名称[PHPSESSID]

  • 2b)登录用户[]

情景B 登录页面

成功登录后,将调用以下内容

function initiatenewsession($app, $userid){
    session_start();
    session_regenerate_id(true);
    $_SESSION["loggeduserid"] = $user_id;
    echo("1a)SESSION NAME[".session_name()."]");
    echo("1b)logged user[".$_SESSION["loggeduserid"]."]");
}

回声结果

  • 1a)会话名称[PHPSESSID]

  • 1b)登录用户[65]

注册页面(用户在登录后点击链接)

session_start();
echo("2a)SESSION NAME[".session_name()."]");
echo("2b)logged user[".$_SESSION["loggeduserid"]."]");
  • 2a)会话名称[PHPSESSID]

  • 2b)登录用户[65]

2 个答案:

答案 0 :(得分:2)

根据我的评论,当您执行session_start()时,php会检查您是否通过session_name()设置会话名称,否则它将使用其默认值。

会话启动基本上是这样的,在php-ish伪代码中:

if (custom_session_name_was_set()) {
   $session_name = get_custom_session_name();
} else {
   $session_name = ini_get('session.name');
}

if (isset($_COOKIE[$session_name])) {
   $id = $_COOKIE[$session_name];
} else {
   $id = generate_new_random_id();
   setcookie($session_name, $id);
}

$session_data = file_get_contents('/path/to/session/files/' . $id);
$_SESSION = unserialize($session_data);

对于您的第一段代码,您需要设置自定义名称,以便用作会话Cookie的名称。

在您的其他代码中,您执行 NOT 设置自定义名称,因此php使用其默认值:PHPSESSID。现在你有两个会话,每个会话都有自己独特的名字,各自不同的ID,以及它们在$ _SESSION中的独立数据。

如果您要使用自定义会话名称,那么您session_name($customName) session_start() import ftplib ftp = ftplib.FTP("sever_ip") ftp.login("username", "password") ftp.retrlines("LIST")

答案 1 :(得分:0)

  1. 如果使用自定义会话名称,则必须呼叫session_name()
  2. 必须session_start()之前致电headers_sent()
  3. 在具有多个PHP版本支持的服务器上,请检查phpversion()以确保服务器未决定运行错误的版本(因此也决定了错误的session_save_path())。