早上好,我正在嘗試在 php (5.6) 中開發一個帶有統計資訊的鏈接縮短系統。這些統計資料之一是會話數。我正在嘗試使用這個邏輯:
if session doesn't exist
start the session
add 1 to the session field and 1 to the click field
else
just add 1 to the click field.
使用我的第一種方法,我嘗試將 session_start 放在代碼中間,但它不起作用。我意識到我做不到,我將陳述句移到代碼的第一行,創建了一個很大的 if 條件。
<?php if (session_status() === PHP_SESSION_NONE) { session_start();
...config and stuff...
$pdo->query("UPDATE links SET session = session 1 WHERE slug = '$slug'");
$pdo->query("UPDATE links SET click = click 1 WHERE slug = '$slug'");
} else {
...config and stuff...
$pdo->query("UPDATE links SET click = click 1 WHERE slug = '$slug'");
}
?>
當我除錯這個會話欄位時,總是會更新,但它應該只在第一次增加。我錯過了什么?
旁注:這是重定向頁面,我不知道它是否有用。
uj5u.com熱心網友回復:
session_status() === PHP_SESSION_NONE在會話實際開始之前總是會導致 true。您應該改用標志。只需放在session_start第一行并執行以下操作:
<?php
session_start();
if (!isset($_SESSION['flag'])) {
$stmt = $pdo->prepare("UPDATE links SET session = session 1 WHERE slug = :slug");
$stmt->execute([':slug' => $slug, ]);
$_SESSION['flag'] = true;
}
$stmt = $pdo->query("UPDATE links SET click = click 1 WHERE slug = :slug");
$stmt->execute([':slug' => $slug, ]);
uj5u.com熱心網友回復:
session_status僅顯示當前會話的狀態,而不顯示用戶是否曾經啟動過會話。這就是為什么您session_status() === PHP_SESSION_NONE在第一次請求執行該 if 陳述句時總是正確的原因。
也許你想做一些事情,比如在會話中存盤一些標志來指示它是否是用戶的第一次訪問
session_start();
if (!isset($_SESSION['initialized'])) {
$_SESSION['initialized'] = time();
...config and stuff...
$pdo->query("UPDATE links SET session = session 1 WHERE slug = '$slug'");
$pdo->query("UPDATE links SET click = click 1 WHERE slug = '$slug'");
} else {
...config and stuff...
$pdo->query("UPDATE links SET click = click 1 WHERE slug = '$slug'");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447222.html
