我一直抱怨用戶互相登錄。他們甚至可以編輯他們的個人資料併發布他們......這顯然是一個巨大的問題。甚至沒有註冊的人正在訪問該網站,並看到他們是以其他人的身份登錄的。使用PHP會話登錄到隨機用戶帳戶的人
這發生在Safari和Firefox
當人們登錄使用$_SESSION['variable'] = name;
系統,所以很標準我會話設置。會話使用的是跨子域:
ob_start();
session_set_cookie_params(0, '/', '.subverb.net');
session_start();
在我的所有頁面的標題中。
我有一個iframe
持有中也包含了相同的標題
我不知道還有什麼其他的信息,我可以給,所以請詢問網站的聊天部分。我真的需要這個來排序,但不確定問題是什麼!
感謝
針對以下:
標準的登錄腳本是由拉里·厄爾曼教科書直線上升:
if ($un && $p) { // If everything's OK.
// Query the database.
$query = "SELECT member_id, member_firstname, member_type, username FROM member WHERE (username='$un' AND password=SHA('$p')) AND active IS NULL";
$result = mysqli_query ($dbc, $query) or trigger_error ("query: $query\n<br />MySQL Error: " . mysqli_error($query));
if (@mysqli_num_rows($result) == 1) { // A match was made.
// Register the values & redirect.
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
mysqli_free_result($result);
$_SESSION['member_id'] = $row['member_id'];
$_SESSION['first_name'] = $row['member_firstname'];
$_SESSION['member_type'] = $row['member_type'];
$_SESSION['username'] = $row['username'];
Facebook登錄腳本執行以下操作:
$query = "SELECT * FROM member WHERE oauth_prov = 1 AND fb_userid = ".$user['id'];
$result = mysqli_query ($dbc, $query) or trigger_error ("query: $query\n<br />MySQL Error: " . mysqli_error($dbc));
if(mysqli_num_rows($result) == 1) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {;
$_SESSION['first_name'] = $row['member_firstname'];
$_SESSION['member_id'] = $row['user_id'];
$_SESSION['oauth_uid'] = $row['fb_userid'];
$_SESSION['username'] = $row['username'];
所有輸入都已過濾,用戶無法通過其他方式添加詳細信息。用戶名和密碼是正常添加的,通過點擊執行該腳本的鏈接可以從Facebook獲得Facebook標識。
這些錯誤在登錄時發生得很好,甚至登錄時甚至沒有發生。沒有其他地方會話值設置在網站上。
會話ID是否附加到URL?這可能會導致會話超時。 – 2011-05-09 17:11:40
不是。你的意思是當他們登錄或在其他地方?就我所知,沒有任何內容在他們登錄(或其他任何地方)時附加到URL上。只需將user_id和用戶名添加到$ _SESSION登錄 – 2011-05-09 17:16:35
您是否使用任何形式的緩存?如果頁面在用戶登錄時被緩存,那麼可能會導致類似的問題。 – Thilo 2011-05-09 17:42:31