我可以用PHP多次打开/关闭一个会话吗(如果可以的话,会出什么问题)



所以这就是我的登录过程的工作方式:

authenticate.php

sessionStart();
if (isset($_SESSION) && !empty($_SESSION['LOCATION'])) {
    $location = $_SESSION['LOCATION'];
    unset($_SESSION['LOCATION']);
} else {
    $location = '//' . $_SERVER['SERVER_NAME'];
}
session_write_close();
sessionStart();
$userIsOnline = isset($_SESSION['ID']);
session_write_close();
sessionStart();
if (!$userIsOnline) {
    // Get the user from the database
    // Validate the user's password
    $_SESSION['ID'] = $user->id;
    $_SESSION['UN'] = $user->un;
    // ... more information
}
session_write_close();
header($location);
exit();

sessionStart函数的内容:

if (session_id() == '') {
    session_name('MyWebsite');
    session_set_cookie_params(86400, '/', $_SERVER['SERVER_NAME'], true, true);
    session_start();
    $_SESSION['LAST_ACTIVITY'] = time();
    $_SESSION['CREATED'] = time();
}

然后在我的网站上的每个页面的顶部:

sessionStart();
print_r($_SESSION);
$_SESSION['LOCATION'] = $_SERVER['REQUEST_URI'];
session_write_close();

打印一个空数组。所以出于某种原因,它在重定向过程中擦除了我的会话数组?有人有什么想法吗?

此外,CREATEDLAST_ACTIVITY的值来自于这个问题。

如果不是因为没有使用HTTPS,而是会话cookie设置为Secure,那么我的另一个想法是更改

if (session_id() == '') {
    session_name('MyWebsite');
    session_set_cookie_params(86400, '/', $_SERVER['SERVER_NAME'], true, true);

if (session_name('MyWebsite') != 'MyWebsite') {
    session_set_cookie_params(86400, '/', $_SERVER['SERVER_NAME'], true, true);

我想知道它是否以不同的名称为您提供了会话ID,这就是print_r($_SESSION);为空的原因。如果没有,我就没主意了!

相关内容

  • 没有找到相关文章

最新更新