簡體   English   中英

為什么在使用session_name函數時重新生成會話

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM