2013-08-29 76 views
-2

嗨我想通過會話讓用戶登錄,這裏是我的代碼之前工作現在它不是我甚至沒有更改代碼。試圖通過PHP登錄不工作腳本

profile.php(顯示登錄後)

<?php 
ob_start(); 
session_start(); 

$userName = $_SESSION['username']; 
$userid = $_SESSION['userid']; 

if(isset($_GET['session'])) { 

    $currentSessionID = $_GET['session']; 
    $currentSessionID = md5(md5(md5($currentSessionID))); 

    session_id($currentSessionID); 

    header("Location:profile.php"); 
    return; 

} 
if(!isset($userName)){ 

    echo "OUT"; 
    return; 
} 

     ... 

腳本/ signin.php

ob_start(); 
session_start(); 
include"config.php"; 
echo "here"; 

// check for required fields 
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['Username']) && isset($_POST['Password'])) { 


$user = mysql_real_escape_string($_POST['Username']); 
$pass = mysql_real_escape_string($_POST['Password']); 

$decrypt = md5(md5(md5($pass))); 

$ensure = "select * from userinfo WHERE Username = '$user' and Password='$decrypt' and status='1'"; 

$result= mysql_query($ensure); 

if(mysql_num_rows($result) > 0) { 

    echo "here2"; 
    $entry = mysql_fetch_array($result) or die(mysql_error()); 

    $_SESSION['username'] = $entry['Username']; 
    echo $entry['Username']; 

    $_SESSION['userid'] = $entry['Id']; 

    $currentSessionID = session_id(); 
    $currentSessionID = md5(md5(md5($currentSessionID)));  

    header("Location: http://www.myprocity.com/profile.php?session=".$currentSessionID); 
    echo "here3"; 

爲什麼IM傳遞會話ID,是因爲我嘗試只保留標誌的原因在註冊HTTPS,而其他網頁的HTTP,所以我可以展示Google廣告,有誰知道如何實現這個沒有安全問題(完美)

它總是去OUT,即使$ _SESSIO N是我的用戶名(數據庫正確)

+0

回聲'$ userName'它可能被正確設置/存儲 –

+0

什麼不工作?你有什麼嘗試? – BenLanc

+0

你確定你沒有把'die();'改成'return;'嗎? 'return'用於功能內部。 – PHPglue

回答

0

profile.php您正在檢查是否存在會話ID,如果發現它,則更改會話ID。你在之後已經與session_start()建立了一個會話,但是PHP手冊特別說明你必須在session_start()之前調用session_id()才能工作。

發送它之前你還要哈希$_GET['session'],並在使用它之前再次哈希。您嘗試在profile.php中使用的會話ID將與signin.php中使用的會話ID不匹配

結果是$ _SESSION中沒有您期望的數據。

您需要合理使用session_id(),並確保正確的值從頁面傳遞到頁面。所有與md5()散列只是複雜的事情 - 放下它。實際上,我不明白爲什麼你需要在每個頁面的頂部多於session_start(),並讓PHP處理會話。你可能會爲做你正在做的事情而爭吵,但是你的解決方案根本行不通。