在PHP中使用session_name() - 无法访问数据

Koh*_*ese 4 php session-variables session-cookies

我用的时候:

session_name( 'fObj' );
session_start();
$_SESSION['foo'] = 'bar';
Run Code Online (Sandbox Code Playgroud)

随后加载页面并运行:

session_start();
print_r( $_SESSION );
Run Code Online (Sandbox Code Playgroud)

不返回会话数据.

如果我删除session_name(); 它工作正常.

有谁知道如何使用具有不同会话名称的会话?

更新:

如果我运行上面的代码,作为两个页面加载,然后更改为:

session_name( 'fObj' );
session_start();
print_r( $_SESSION );
Run Code Online (Sandbox Code Playgroud)

我可以访问数据.但是,如果它只在我第一次加载没有该行的页面时才有效:

session_name( 'fObj' );
Run Code Online (Sandbox Code Playgroud)

Koh*_*ese 6

根据 nwolybug 的帖子,我认为这一定是由于某些环境设置造成的。我可以通过执行以下操作来使其工作:

if( $_COOKIE['fObj'] )
{
    session_id( $_COOKIE['fObj'] );
    session_start();
}
var_dump( $_SESSION );
Run Code Online (Sandbox Code Playgroud)


Ant*_*ieb 5

John Robertson是正确的,他提到的陈述直接来自PHP手册(http://php.net/manual/en/function.session-name.php).

默认情况下,您的会话名称来自php.ini变量'session.name',通常设置为'PHPSESSID'.在每个启动请求时(如上所述),会话将重命名为PHPSESSID,除非您在每个页面上的session_start()之前调用session_name('fObj'),因此page1:

<?php
  session_name( 'fObj' );
  session_start();

  $_SESSION['foo'] = 'bar';
Run Code Online (Sandbox Code Playgroud)

第2页:

<?php
  session_name( 'fObj' );
  session_start();

  print_r($_SESSION);
Run Code Online (Sandbox Code Playgroud)

随后,您可以转到php.ini设置并将session.name变量从PHPSESSID更改为fObj,并且您创建的所有会话的会话名称都将为fObj.