因為正確的驗證碼結果已經經過加密之後儲存在了session中,所有用於輸入的驗證碼會跟session中的進行比對,從而判斷驗證碼是否輸入有誤!
既然老是顯示:"驗證碼輸入有誤"
說明session中儲存到結果可能有問題。然後,dump下session,發現結果為null......
解決辦法:
使用phpinfo查看session資訊,找出session的儲存路徑,然後給其設定寫入的許可權即可
如果無法解決可以參考下面
現在我們來拋開cookie使用session,主要途徑有三條:
1、設定php.ini中的session.use_trans_sid = 1或者編譯時間開啟開啟了–enable-trans-sid選項,
讓PHP自動跨頁傳遞session id。
2、手動通過URL傳值、隱藏表單傳遞session id。
3、用檔案、資料庫等形式儲存session_id,在跨頁過程中手動調用。
例子,php利用session登入退出的簡單例子
登入
<?php
//使用會話記憶體儲的變數值之前必須先開啟會話
session_start();
//使用一個會話變數檢查登入狀態
if(isset($_SESSION['username'])){
echo 'You are Logged as '.$_SESSION['username'].'<br/>';
//點擊“Log Out”,則轉到logOut頁面進行登出
echo '<a href="logOut.php"> Log Out('.$_SESSION['username'].')</a>';
}
/**在已登入頁面中,可以利用使用者的session如$_SESSION['username']、
* $_SESSION['user_id']對資料庫進行查詢,可以做好多好多事情*/
?>
退出
<?php
//即使是登出時,也必須首先開始會話才能訪問會話變數
session_start();
//使用一個會話變數檢查登入狀態
if(isset($_SESSION['user_id'])){
//要清除會話變數,將$_SESSION超級全域變數設定為一個空數組
$_SESSION = array();
//如果存在一個會話cookie,通過將到期時間設定為之前1個小時從而將其刪除
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600);
}
//使用內建session_destroy()函數調用撤銷會話
session_destroy();
}
//location首部使瀏覽器重新導向到另一個頁面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>