-2

こんにちは、セッションを介してユーザーにサインインさせようとしています。これは、以前は機能していたコードです。コードを変更していません。

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";

セッションIDを渡す理由は、サインインとサインアップのみをHTTPSに保ち、他のページはHTTPでGoogle広告を表示できるようにしようとしているためです。セキュリティの問題なしにこれを実装する方法を知っている人はいますか(完全に)

$_SESSION が私のユーザー名であっても、常に OUT になります (データベースは正しいです)

4

1 に答える 1

0

セッション ID の存在を確認し、profile.php見つかった場合はセッション ID を変更しています。でセッションを設定したにこれを行っていますが、PHP のマニュアルでは、これを機能させるには前にsession_start()呼び出す必要があると具体的に述べています。session_id()session_start()

$_GET['session']また、送信前と使用前にハッシュしています。で使用しようとしてprofile.phpいるセッション ID は、で使用されているセッション ID と一致しませんsignin.php

その結果、$_SESSION には期待するデータが含まれていません。

の使用を合理化しsession_id()、正しい値がページからページに渡されるようにする必要があります。でのすべてのハッシュmd5()は問題を複雑にするだけです - やめてください。session_start()現実的には、各ページの上部以外に何も必要なく、PHP にセッションを処理させる理由がわかりません。あなたがやっていることについて議論があるかもしれませんが、あなたの解決策はうまくいきません。

于 2013-08-29T23:32:37.843 に答える