我已經看到了很多關于這個問題的帖子,但沒有一個能解決我的問題! 有些人說發生這種情況是因為用戶在session_start();之前使用了session_regenerate_id(true);! 然而,我的代碼不是這樣的。我也看到有人說我應該在session_start();之前去掉多余的空格,我也這么做了,但在加載網站的某個時候我還是得到了警告。在我重繪 Boom后,會話被破壞,用戶被注銷了。
注意*。我在第12行(第三個if陳述句)得到了警告。
我的代碼在我的每個頁面的開始 :
<?php
session_start()。
require "DB/users-database.php"/span>。
if(isset($_SESSION['starttime'/span>]) & & (time() - $_SESSION['starttime'/span>] > 1200)){
session_destroy()。
} else {
$_SESSION['starttime'] = time()。
session_regenerate_id(true)。
}
if(isset($_SESSION['starttime']){
if(time() - $_SESSION['starttime'] > 180) {
session_regenerate_id(true)。
}
}
.
.
.
uj5u.com熱心網友回復:
你試圖從一個被破壞的會話中重新生成ID。讓我們看看會發生什么,如果我們說$_SESSION中的'starttime'索引被定義,并且time() - $_SESSION['starttime'] > 1200為真 :
< ?php
//There, you start your session. 這很好。
session_start()。
require "DB/users-database.php"。
if(isset($_SESSION['starttime'/span>]) & & (time() - $_SESSION['starttime'] > 1200>)){
//There, you destroy it because `starttime` is set, and time() - starttime > 1200
session_destroy()。
} else {
$_SESSION['starttime'] = time()。
session_regenerate_id(true)。
}
//It's true, since $_SESSION['starttime'] was set before, no reason to not been set there.
if(isset($_SESSION['starttime'/span>]){
//Indeed, if time() - starttime > 1200, it's also > to 180
if(time() - $_SESSION['starttime'] > 180) {
//you try to regenerate ID on a session that you already destroyed.
session_regenerate_id(true)。
}
我認為你期望$_SESSION能被session_destroy清理掉。其實不然。請看https://www.php.net/manual/en/function.session-destroy.php :
session_destroy() 銷毀了與當前會話相關的所有資料。它不會取消與會話相關的任何全域變數,或取消會話cookie。要再次使用會話變數,必須呼叫session_start()。
因此,一個解決方案是在session_start()之后立即呼叫session_destroy(),根據檔案,你的代碼可以作業:
if(isset($_SESSION['starttime'/span>]) & & (time() - $_SESSION['starttime'] > 1200>)){
//There, you destroy it because `starttime` is set, and time() - starttime > 1200
session_destroy()。
session_start(); //According to the documentation, from this point $_SESSION have been reseted..
} else {
$_SESSION['starttime'] = time()。
session_regenerate_id(true)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319157.html
標籤:
下一篇:如何阻止用戶編輯對方的資訊?
