[英]why regenerate session when use session_name function
我使用php類在自己的腳本上管理會話。 在該類中,我使用一個靜態方法,在該靜態方法上,我使用session_name(“ some_name”)重命名會話默認名稱“ PHPSESSID”。 但是在每個重新加載頁面中使用session_name()函數時,會話都會重新生成。
現在為什么在使用session_name函數時重新生成會話?
class T_session { // cookie new name // expire , path , domain , secure , http only static public function set_cookie($cookie_name , $expire = 0 , $path = "/" , $domain = null , $secure = null , $http_only = null ){ // Set cookie name session_name($cookie_name . "_Session"); // Set the domain to default to the current domain. $domain = isset($domain) ? $domain : Tbmedia_domain_root(); // Set the default secure value to whether the site is being accessed with SSL $secure = isset($secure) ? $secure : Tbmedia_check_https(); session_set_cookie_params($expire,$path,$domain,$secure,true); // Configuration php ini ini_set('session.save_handler','files'); ini_set('session.use_cookies',1); ini_set('session.cookie_secure',1); ini_set('session.use_only_cookies',1); ini_set('session.cookie_domain',$domain); ini_set('session.cookie_httponly',1); ini_set('session.entropy_length',32); ini_set('session.entropy_file','/dev/urandom'); ini_set('session.hash_function','sha256'); ini_set('session.hash_bits_per_character',5); session_start(); } }
沒有人不知道如何在不重新生成會話的情況下重命名會話名稱? 我嘗試使用ini_set和session_name函數,但是在每個重新加載頁面中,會話都會重新生成,並且所有先前的數據都丟失了
我的會話管理類是這個,而我將靜態函數放在標題的頂部:
<?php
namespace Admin\includes;
class TBMedia_session
{
// cookie new name
// expire , path , domain , secure , http only
static public function set_cookie($cookie_name, $expire = 0, $path = "/", $domain =
null, $secure = null, $http_only = null)
{
session_name($cookie_name . "_Session");
// Set the domain to default to the current domain.
$domain = isset($domain) ? $domain : Tbmedia_domain_root();
// Set the default secure value to whether the site is being accessed with SSL
$secure = isset($secure) ? $secure : Tbmedia_check_https();
session_set_cookie_params($expire, $path, $domain, $secure, true);
// Configuration php ini
ini_set('session.save_handler', 'files');
ini_set('session.use_cookies', 1);
ini_set('session.cookie_secure', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_domain', $domain);
ini_set('session.cookie_httponly', 1);
ini_set('session.entropy_length', 32);
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.hash_function', 'sha256');
ini_set('session.hash_bits_per_character', 5);
session_start();
}
static public function session_security()
{
// Make sure we have a canary set
if (!isset($_SESSION['canary'])) {
session_regenerate_id(true);
$_SESSION['canary'] = [
'birth' => time(),
'IP' => Tbmedia_get_client_ip(),
'user_agent' => $_SERVER['HTTP_USER_AGENT']
];
}
if ($_SESSION['canary']['IP'] !== Tbmedia_get_client_ip() || $_SESSION['canary']['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) {
session_regenerate_id(true);
foreach (array_keys($_SESSION) as $key) {
unset($_SESSION[$key]);
}
$_SESSION['canary'] = [
'birth' => time(),
'IP' => Tbmedia_get_client_ip(),
'user_agent' => $_SERVER['HTTP_USER_AGENT']
];
}
// Regenerate session ID every five minutes:
if ($_SESSION['canary']['birth'] < time() - 300) {
session_regenerate_id(true);
$_SESSION['canary']['birth'] = time();
}
}
}
我有兩個問題與此代碼。 一:使用session name()時,將重新生成會話並清除所有數據。 二:每個重新加載頁面,所有會話清除並重新生成。
我的代碼哪里錯了?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.