在浏览其他帖子后,我找不到答案。 问题是,当我创建自定义会话名称时,我无法访问任何其他页面上的会话变量。如何使用自定义会话变量?
情景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]
答案 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)
session_name()
。session_start()
之前致电headers_sent()
。phpversion()
以确保服务器未决定运行错误的版本(因此也决定了错误的session_save_path()
)。