簡體   English   中英

Session_id行為異常

[英]Session_id behaving weirdly

所以我有SessionHandler類,還有另一個使它生效的文件( cfg_session.php ):

use \Classes\MySessionHandler as Sessao;

$sessao = new Sessao();

// PHP < 5.4
session_set_save_handler( 
   array($sessao, 'open'),
   array($sessao, 'close'),
   array($sessao, 'read'),
   array($sessao, 'write'),
   array($sessao, 'destroy'),
   array($sessao, 'gc')
);

register_shutdown_function('session_write_close');

session_start();

好的,小的區別是我在本地網絡中使用:

session_set_save_handler($sessao) 

因為在我的localweb中,實際上是PHP> 5.5。

它在我的本地網絡上運行良好,我刷新頁面,注銷,登錄,關閉選項卡,打開選項卡,再次登錄,一切正常,瀏覽器中的PHPSESSID等於在會話文件中創建的PHPSESSID,因此上。

編輯 :我有一台PHP <5.4的服務器,實際上,我使用的是上面的代碼,意味着PHP <5.4,但是它仍然很奇怪。 刷新瀏覽器,它創建另一個會話文件,但不更改PHPSESSID。 第一次嘗試登錄時,過程如下:它創建會話文件,將用戶重定向到某個頁面,該頁面在服務器上執行另一個請求,它只是創建另一個與PHPSESSID完全不同的會話文件,當然,該應用將我注銷。 那是奇怪的部分。

但是,然后,我嘗試再次正常登錄,它使我登錄,就可以了。 每個請求具有相同的ID,session_regenerate_id()工作正常,一切正常,PHPSESSID與創建的會話文件匹配。

但是,然后,如果我注銷,則關閉該選項卡,打開一個新選項卡,然后嘗試登錄(或僅關閉選項卡而不注銷),它只會執行相同的操作:登錄我,創建一個會話文件,但是隨后更改de session_id再次把我踢出去。

我真的很堅持。 無法確定是否由於PHP <5.4或其他原因而發生這種情況。

注意:-session_regenerate_id()用於登錄檢查是否存在會話(然后更新時間和regenerateId)以及注銷

  • cfg_session.php 在每個需要使用會話變量的頁面上都需要一次。

我需要一些啟示。 我已經看過很多主題,但是沒有一個非常有用的信息或解決這一怪異行為的方法。 提前致謝。

SessionHandlerInterface類僅在5.4.0或更高版本中可用。 您的代碼適用於PHP 5.4.0及更高版本。 它肯定會給奇怪的東西

如何以編程方式為會話記錄coockie會話時間set_lifetime? 也許您需要設置會話Cookie選項

session_set_cookie_params(3600);

http://php.net/manual/zh/function.session-set-cookie-params.php

剛剛添加:

ini_set('session.use_cookies', 1);

問題是:我沒有在本地網絡上使用它,但是我讀到默認值為1(true),並且可能在我的實時服務器上將其設置為0。現在它可以正常工作。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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