-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所以我可以展示谷歌广告,有谁知道如何在没有安全问题的情况下实现这个(完美)

即使 $_SESSION 是我的用户名(数据库正确),它也总是会输出

4

1 回答 1

0

您正在profile.php检查是否存在会话 ID,如果找到,则更改会话 ID。您在与 建立会话之后session_start()执行此操作,但 PHP 手册明确指出您必须在此之前调用session_id()才能session_start()使其工作。

您还在$_GET['session']发送之前进行哈希处理,并在使用之前再次进行哈希处理。您尝试使用profile.php的会话 ID 与signin.php

结果是 $_SESSION 中没有您期望的数据。

您需要合理使用session_id(),并确保在页面之间传递正确的值。所有的散列md5()只是使事情复杂化 - 放弃它。实际上,我不明白为什么您需要的只是session_start()在每个页面的顶部并让 PHP 处理会话。你可能对你正在做的事情有争论,但你的解决方案根本行不通。

于 2013-08-29T23:32:37.843 回答