提问人:para 提问时间:11/1/2023 最后编辑:para 更新时间:11/3/2023 访问量:65
PHP Session_id会根据每个请求进行更改
PHP Session_id is changing on each request
问:
我需要帮助来修复我的 php session_id,该在每个请求上都会发生变化。
我正在使用 php8.2,这在 php8.1 上运行良好
我在这里和网络上阅读了很多关于这个问题的信息......但这并不能解决问题。
我正在使用 init_set 将会话参数设置为 cookie_lifetime、gc_maxlifetime 等......并session_set_cookie_params自定义会话,但仍然相同。
有人有想法吗?
这是我的 yaml 配置
session:
session_name: "xxxxx_xxxx"
idle_time: 600 # 10min idle
cookie_lifetime: 3800 #session expires in 10min if left idle
path: /
domain: "localhost"
secure: true
httponly: true
# cookie_httponly: 1
# cookie_secure: 1
# use_strict_mode: 1
gc_maxlifetime: 1440
gc_probability: 1
gc_divisor: 1000
use_cookies: 1
globalized: false
下面是要设置的会话参数数组
public function getSessionRuntimeConfigurations(): array
{
return [
'session.gc_maxlifetime',
'session.cookie_lifetime',
// 'session.gc_divisor',
// 'session.gc_probability',
// 'session.use_cookies',
// 'session.cookie_httponly',
// 'session.cookie_secure',
// 'session.use_strict_mode',
// 'session.gc_probability',
// 'session.gc_divisor',
];
}
这是ini_set命令
public function iniSet(): void
{
foreach ($this->sessionEnvironment->getSessionRuntimeConfigurations() as $option) {
$sessionKey = str_replace('session.', '', $option);
if ($option && array_key_exists($sessionKey, $this->sessionEnvironment->getConfig())) {
ini_set($option, $this->sessionEnvironment->getSessionIniValues($sessionKey));
}
}
}
对不起,这是我开始会话的地方
public function start(): void
{
$this->setSessionName($this->sessionEnvironment->getSessionName());
session_set_cookie_params((int) $this->sessionEnvironment->getLifetime(), $this->sessionEnvironment->getPath(), $this->sessionEnvironment->getDomain(), $this->sessionEnvironment->isSecure(), $this->sessionEnvironment->isHttpOnly());
$this->startSession();
if ($this->validateSession()) {
if (!$this->preventSessionHijack()) {
$_SESSION = [];
$_SESSION['IPaddress'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['userAgent'] = $_SERVER['HTTP_USER_AGENT'];
} elseif (rand(1, 100) <= 5) { // Give a 5% chance of the session id changing on any request
$this->sessionRegeneration();
}
} else {
// $_SESSION = array();
// session_destroy();
// $this->startSession(); // restart session
}
和这里
/**
* Start our session if we haven't already have a php session.
*
* @return void
*/
public function startSession()
{
if (session_status() == PHP_SESSION_NONE && session_id() == '') {
session_save_path(ROOT_DIR . DS . 'session_dir');
session_start();
}
}
这是所有相关的地方
public function __construct(protected SessionEnvironment $sessionEnvironment)
{
if ($sessionEnvironment) {
$this->sessionEnvironment = $sessionEnvironment;
}
$id = session_id();
$this->iniSet();
// Destroy any existing sessions started with session.auto_start
if ($this->isSessionStarted()) {
session_unset();
session_destroy();
}
$this->start();
}
答: 暂无答案
评论