【问题标题】:PHP Session change namePHP 会话更改名称
【发布时间】:2015-09-25 07:39:51
【问题描述】:

我的 php 登录系统有一些问题。

我正在尝试以更好的方式开始会话。我遵循了互联网上的教程,代码听起来像这样:

function initiazaSesiune()
{
 $secure = 'SECURE'; 
 $httponly = 'true';

// Fortam folosirea COOKIE
if (ini_set('session.use_only_cookies', 1) === FALSE) {
    echo 'ERROR NO COOKIE';
    exit();
}

$cookieParams = session_get_cookie_params(); 
session_set_cookie_params($cookieParams["lifetime"],
    $cookieParams["path"], 
    $cookieParams["domain"], 
    $secure,
    $httponly);

session_name("test");
session_start(); 
session_regenerate_id(true);

}

我的登录页面是这样的:

1) 检查是否已登录(如果 $_SESSION['logged_in'] 变量不为 1,则显示 0.1 ||| 如果变量 $_SESSION['logged_in'] 不为 1(真)||| 0.3,如果在数据库中帐户没有' t 显示已登录。||| 1 如果帐户已登录

2) 如果用户凭据有效,则设置 $_SESSION

3) 再次调用 1) 中的函数。

登出页面:

session_start();
session_unset();
session_destroy();
session_write_close();

当我使用有效凭据时,登录页面显示如下: 0.11 表示用户在开始认证时没有登录,程序设置插入的值是因为它们是正确的,而 1 是因为保存的值与数据库中的值相比是有效的。

如果我刷新此页面,我会再次得到 0.11,这是不正确的,因为当我再次启动该过程时用户已登录。它应该显示为 11。

如果我消除 session_name 和 session_regenerate_id,一切正常。首先显示 0.11,然后显示 11。

如果我输入 sestion_name 和 sesion_regenerate_id 并删除 session_set_cookie_params 一切正常,首先显示 0.11,然后显示 1...

我做错了什么?

【问题讨论】:

    标签: php login session-cookies


    【解决方案1】:

    将您的session_name() 移至设置上方

    我怀疑一个想法可能是问题所在,然后我在下面找到了一些评论。

    将您的会话名称移动到您 session_get_cookie_params() 的上方,或者移动到您的 ini_set() 上方

    这不是我可以轻易测试的,但我会尝试来自the comments of the php documentationsession_set_cookie_params() 的以下建议:

    我发现使用会话有点困难,因为文档并没有真正指出必须通过 session_name() 设置会话名称才能使 session_set_cookie_params() 有任何用途。我在这篇文章中没有找到 session_name() 的引用,如果不是熟悉 session 的朋友,我的 session 函数会一团糟。

    所以,本质上,对于任何想知道从哪里开始的人:在使用 session_set_cookie_params() 之前声明一个会话名称,否则你可能会煽动 php 到对你的网络服务器犯下一些暴行的地步。

    像这样:

    function initiazaSesiune()
    {
     $secure = 'SECURE'; 
     $httponly = 'true';
     
     session_name("test");  // Moved above any settings
    
    // Fortam folosirea COOKIE
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        echo 'ERROR NO COOKIE';
        exit();
    }
    
    $cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"],
        $cookieParams["path"], 
        $cookieParams["domain"], 
        $secure,
        $httponly);
    
    session_start(); 
    session_regenerate_id(true);
    
    }
    

    【讨论】:

    • 我在我的研究中也看到了该评论,它不起作用...我有同样的问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2020-01-17
    • 2020-07-14
    • 2018-05-21
    • 1970-01-01
    • 2021-05-18
    • 2023-04-04
    相关资源
    最近更新 更多