gpt4 book ai didi

PHP session HTTP到HTTPS问题

转载 作者:可可西里 更新时间:2023-11-01 15:09:18 27 4
gpt4 key购买 nike

我有一个 (HTTPS) login.php 页面,它仍然是 HTTPS(即,一旦用户登录,就会转到帐户仪表板)。现在的问题是,用户在登录到安全仪表板时点击了一个非敏感页面,如 (HTTP) about-us.php 页面, session 不会通过 HTTP 传输,因为我有 session.cookie_secure=1,这意味着用户在 HTTP 页面上显示为已注销。

然而,当用户返回到仪表板页面或任何敏感帐户页面时,我被告知他应该仍然登录(即从 HTTP 返回到 HTTPS)?然而事实并非如此,他似乎也在 HTTPS 连接上注销了?

我相信我遗漏了导致此问题的原因。这是我的代码:

这是在 login.php 页面上启动 session 时调用的 PHP 头文件:

session_start();
session_regenerate_id(true); /*avoid session fixation attempt*/

/*Create and check how long session has been started (over 5 mins) regenerate id - avoid session hijack*/
if(!isset($_SESSION['CREATED']))
{
$_SESSION['CREATED'] = time();/*time created session, ie from login/contact advertiser/email_confirm only ways for new session to start*/
}
elseif(time() - $_SESSION['CREATED'] > 300)
{
/*session started more than 5 mins(300 secs) ago*/
session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
$_SESSION['CREATED'] = time(); /*update creation time*/
}

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin']))
{
$_SESSION['loggedin']=1;/*used to track if user is logged in on pages*/
}

/*if return false browser supports standard ob_start();*/
if(ob_start("ob_gzhandler")){ob_start();}

这是每个页面都需要的 PHP 头文件,用于检查 session 是否已经启动:

session_start(); 

$session_errors=0;/* if>0 user not logged in*/

/*check if session is already initiated*/
if(isset($_SESSION['CREATED']))
{
if(time() - $_SESSION['CREATED'] > 300)
{
/*session started more than 5 mins(300 secs) ago*/
session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
$_SESSION['CREATED'] = time(); /*update creation time*/
}
}
elseif(!isset($_SESSION['CREATED'])){$session_errors++;}/*user not logged in*/

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin'])){$session_errors++;}/*user not logged in*/

if(ob_start("ob_gzhandler")){ob_start();}

此外,如果有任何使用,这是在非敏感页面(如 about-us.php)上打开 HTTPS 的代码

if ($_SERVER['SERVER_PORT']!=80)
{
$url = "http://". $_SERVER['SERVER_NAME'] . ":80".$_SERVER['REQUEST_URI'];
header("Location: $url");
}

我的 php.ini 文件 cookie 设置

session.cookie_secure=1
session.cookie_httponly=1
session.use_only_cookies=1
session.cookie_lifetime = 0
session.save_path = /tmp
session.save_handler = files

最佳答案

@rickchristie 的描述很好,但我认为他没有建议更好的解决方案。如果您并不总是想使用 HTTPS(有时确实有意义;about_us 页面不需要安全),您可以遵循 session_start 上的建议。页面和使用 named sessions继续上一个 session 。这很容易使用;只需包含 session_start 调用

session_name("MySession"); // replace with whatever makes sense
session_start();

在所有安全页面上。

关于PHP session HTTP到HTTPS问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com