试图通过PHP登录不工作的脚本

时间:2013-08-29 23:10:44

标签: php login session-cookies

您好我正在尝试让用户通过会话登录,这是我之前正在运行的代码现在它不是我甚至没有更改代码。

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

1 个答案:

答案 0 :(得分:0)

profile.php中,您正在检查是否存在会话ID,并在找到会话ID时更改会话ID。您正在使用session_start()设置会话后,但PHP手册明确指出您必须在session_id()之前致电session_start()才能使其正常工作

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

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

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