您好我正在尝试让用户通过会话登录,这是我之前正在运行的代码现在它不是我甚至没有更改代码。
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
答案 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处理会话。你可能有一个争论要做你正在做的事情,但你的解决方案根本行不通。