【发布时间】:2016-09-01 13:50:04
【问题描述】:
我的php 会话出现异常行为。情况:
- 用户登录
(https://example.com)应用程序 - 会话 cookie 有效期设置为 7 天。 (从浏览器 cookie 生命周期验证)
- 用户移动到另一个域(没有
https) - 当用户尝试通过单击应用程序链接在一段时间后返回时,会话被破坏。
- 行为突然。有时,它仍然有效。
这是我开始会话的方式:
if(!$this->session_manager_issession_set()) {
$this->set_ini_config();
session_name($this->session_manager_name);
session_set_cookie_params($this->session_cookie_life, "/"); //Required for browser cookie cleanup
}
session_start();
if(empty($_SESSION))
{
$output['status'] = false;
}
else{
// Fetch the variables
}
public function session_manager_issession_set(){
$output = true;
$session_status = session_status();
switch($session_status){
case PHP_SESSION_ACTIVE :
break;
default:
$output = false;
}
return $output;
}
private function set_ini_config(){
$output = true;
ini_set('session.gc_probability', 1); //If session expires then ensure that session is flushed and cleared at all instances
ini_set('session.gc_divisor', 100); //If session expires then ensure that session is flushed and cleared at all instances
ini_set('session.gc_maxlifetime', 7*24*60*60); //MAx life of session cookie
ini_set('session.cookie_secure', true);
return $output;
}
这可能是什么原因?我是否以不正确的方式实施会话?
【问题讨论】:
-
尝试将
session_start();移动到文件顶部,紧跟在<?php之后。除此之外,也许你应该看看documentation -
当您说“用户移动到另一个域”时,这意味着不同的 Web 服务器,对吧?
-
@EagleEye, session_name() 需要在 session_start() 之前调用
-
@Webomatik 它在 session_start 之前被调用!是的,它移动到不同的网络服务器
-
@Webomatik 它有时也有效,
$_SESSION是空的
标签: php session cookies logout