用户登录时设置会话?

时间:2014-05-16 14:19:17

标签: php mysql session

我正在使用一个登录脚本,假设在用户登录时设置会话。此会话称为'$ _SESSION ['user']',并且是我的表中存储在'session_number'下的唯一编号。

$_SESSION['user'] = 'session_number'

登录脚本(login.php):

<?php
include("config.php");
$tbl_name="supplier_pre_sign";  
$myusername=$_POST['myusername']; 
$myusername = stripslashes($myusername);
$myusername = mysql_real_escape_string($myusername);
$sql="SELECT * FROM $tbl_name WHERE code='$myusername' and status='active'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$row=mysql_fetch_array($result);
if($count==1){
session_start();
$_SESSION['user']=$myusername;
$_SESSION['username']=$row['firstname'];
if(isset($_SESSION['val']))
$_SESSION['val']=$_SESSION['val']+1;
else
$_SESSION['val']=1;
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$query = "SELECT * FROM supplier_session WHERE user_IP='$ip'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) { 
}else{ 
$myusername = filter_input(INPUT_POST, 'myusername');    
$ipaddress = $_SERVER["REMOTE_ADDR"];
$sql="INSERT INTO supplier_session (session_number, user_IP, date)
VALUES ('$myusername', '$ipaddress', NOW())";
$result = mysql_query($sql); 
}
header("location:supplier_panel.php");

}else {
header('Location: index.php?msg=' . urlencode(base64_encode("Sorry That Code Wasn't Right!")));
}
ob_end_flush();
?>

一旦用户登录会话,则假设已设置。现在我试图在我的MYSQL Update where子句中使用$ _SESSION ['user'],如下所示:

(register.php):

$sql="UPDATE supplier_session SET form1_completed = 'Yes' WHERE form1_completed = 'No' AND session_number = ".$_SESSION['user']."";

我得到的问题是我的mysql更新脚本失败,没有错误,但我猜测$ _SESSION ['user']没有定义,我不知何故需要将这个会话带到每个页面?

有人可以告诉我我哪里出错了吗

1 个答案:

答案 0 :(得分:1)

您可能想要尝试的一件事是将session_start()调用放在脚本的顶部。

但为什么要重新发明轮子呢?当它涉及您网站的安全性时尤其如此。您正在使用数据库代码,让您对SQL注入攻击持开放态度。我猜你也会用纯文本存储用户密码。你只是对问题敞开心扉。

你真的应该选择像http://www.php-login.net这样的东西。