我發現這個問題#2的來源。它是利用了session_register(富)的。成立了以會話的登錄系統,PHP
我把以下內容添加到我的handle_registration.php。
session_register("foo");
session_register("foo2");
$foo2 = $_POST['email'];
$foo['email'] = $_POST['email']
問題仍然存在,因爲沒有變量存儲到我的會話cookie中。
這是我的login script的邏輯。
- 解決了Pascal Martin和The Disintegrator:這是把功能
session_write_close
中產生的登錄會話的正確的地方? - 你怎麼能得到一個永久的會話用戶「會話」,使得一個新的會話沒有啓動,每次的index.php加載?
我的session_start()
在我的index.php
的開頭。
我的index.php之初
session_start();
if($_SESSION['logged_in'] == false) {
$random_number = rand(1,100000);
session_id($random_number);
session_id['email'] = '';
}
,而我的index.php的盡頭
<?php
session_write_close(); // Session code ends here!
?>
我的會話代碼驗證的最開始之後有用戶密碼過程由
$dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123");
$result = pg_prepare($dbconn, "query22", "SELECT passhash_md5 FROM users
WHERE email=$1;");
$passhash_md5 = pg_execute($dbconn, "query22", array($_REQUEST['email']));
// users from registration/login form
if ($passhash_md5 == md5($_REQUEST['password'])) {
$_SESSION['logged_in'] = true;
$_SESSION['email'] = $_REQUEST['email'];
$_SESSION['passhash_md5'] = md5($_REQUEST['password']);
}
// this may be unnecessary if the passhash_md5 cannot be changed by the user
$passhash_md5_2 = pg_execute($dbconn, "query22", array($_SESSION['email']));
// users staying in the site
if ($passhash_md5_2 == $_SESSION['passhash_md5'])) {
$_SESSION['logged_in'] = true;
}
該代碼會生成持續的隨機會話,從而不會爲用戶保存任何用戶的數據。 我在我的代碼$_SESSION
更換登錄/註冊處理程序後每個$_REQUEST
,因爲$_REQUEST
不包括$ _SESSION - 仍然是同樣的問題,我無法看到用戶名登記/登錄後的首頁。
謝謝你解決第一個問題! – 2009-08-13 05:08:06
不客氣:-)我已經編輯了幾個更多想法的答案;也許他們也會幫忙...... – 2009-08-13 05:53:54
謝謝你對第二次更新的解釋! - 我實施了改進建議。該網站連續不斷地生成會話ID,以便用戶的數據不會傳輸到下一頁。 – 2009-08-13 13:44:25