我有以下代碼在 /t/cgi-bin/test1.php 下運行良好,但相同的代碼在 /p/cgi-bin/test1.php 下失敗。每次我在 /p/cgi-bin... 下運行時,我都會立即進入 test_log1.html。在超時到 test_log1.html 之前它不會等待 15 分鐘。任何幫助表示贊賞。
<?php
session_start();
if(isset($_SESSION["test"]))
{
if((time() - $_SESSION['last_login_timestamp']) > 900)
{
header("location:../test_log1.html");
}
else
{
$_SESSION['last_login_timestamp'] = time();
}
}
else
{
header('location:../test_log2.html');
}
?>
uj5u.com熱心網友回復:
代碼沒有錯。該檔案必須重新創建。它現在正在作業。這個帖子可以關了。
uj5u.com熱心網友回復:
有幾個問題。
一
也許是因為默認情況下每個瀏覽器只有一個會話。它不是每個標簽或每個網址。
所以,一旦你運行了,會話就已經有了last_login_timestamp。然后它對第二個會話使用相同的值。
如果您希望它們不同,那么您必須為兩條路徑使用不同的會話 ID。
另一種方法是在檔案開頭清除/重置會話。
還有一個是使用不同的測驗變數,例如test1和test2。
二
test永遠不會被設定,并且last_login_timestamp的值為空。我假設您正在其他地方設定測驗。所以,為了測驗,這里是更新的代碼。?? _ 運算子確保值在它為空時到達時間
<?php
session_start();
if(isset($_SESSION["test"]))
{
$last = $_SESSION['last_login_timestamp'] ?? time();
if((time() - $last) > 900)
{
header("location:../test_log1.html");
}
else
{
echo 'Has not timed out';
}
}
else
{
$_SESSION["test"] = 'xx';
header('location:../test_log2.html');
}
?>
如果你想要三個獨立的會話,那么你必須使用不同的 session_ids 或者只是不同的變數。所以對目錄 p 使用test_p和last_login_timestamp_p等等。
三
PHP 是一種服務器端語言。運行時,除了重定向或來自上述代碼的回顯之外,不會向瀏覽器發送任何內容。
設定會話變數后,15 分鐘后運行代碼,這兩個地方都會超時。從那時起,這將繼續發生,直到會話變數被清除。
但是,它不能在瀏覽器上超時并在 15 分鐘后自行轉到其他頁面。為此,您需要使用 javascript。
uj5u.com熱心網友回復:
嘗試:
header('Location: '../test_log2.html');
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/508462.html