我已经创建了一个适用于sessiosn而不是cookie的登录..这是我的login.php代码
<?php
include 'functions.php';
if(loggedin()){
header("Location: index.php");
exit();
}
if(isset($_POST['login'])){
$username=$_POST['username'];
$password=$_POST['password'];
if(isset($_POST['rememberme'])) {
$rem=$_POST['rememberme'];
} else { $rememberme=""; }
if($username&&$password){
$login = mysql_query("SELECT * FROM users WHERE username='$username'");
while($row = mysql_fetch_assoc($login)){
$db_password = $row['password'];
if($password == $db_password){
$loginok= TRUE;
}
else{
$loginok= FALSE;
}
if($loginok==TRUE)
{
if($rememberme=="on"){
setcookie("username",$username, time() + 7200);
}else if ($rememberme==""){
$_SESSION['username'] = $username;}
header("Location: index.php");
exit();
}
else
die("Incorrect Username/Password");
}
}
else
die("Please enter a username and password");
}
和我的functions.php
<?php
session_start();
$host = "localhost";
$user = "root";
$pass = "";
$db = "loginphp";
mysql_connect($host, $user, $pass) or die("Couldn't connect");
mysql_select_db($db);
function loggedin()
{
if(isset($_SESSION['username'])||(isset($_COOKIE['username'])))
{
$loggedin = TRUE;
return $loggedin;
}
}
但是当我关闭broswer时,cookie不能保存,就像我已经完全注销一样。 会议工作正常..
这里也是我的logout.php
session_start();
session_destroy();
setcookie("username","",time() - 7200);
header("Location: login.php");
答案 0 :(得分:0)
好像你正在设置$ rem,而不是$ rememberme。将行更改为:
$rememberme = $_POST['rememberme'];
只是为了警告你,如果有人想登录这个方法,他们所要做的就是在cookie和宾果游戏中设置一个用户名!
查看已接受的答案here以获得一个好的方法。
虽然我正在使用它,但您还需要保护自己免受SQL注入攻击,这是您当前的代码所开放的。看here。
答案 1 :(得分:0)
我更改了Cookie的格式以允许其生存30天,无论您应该始终在设定的持续时间内验证数据。你将$ _POST分配给$ rem而不是$ rememberme所以我更正了你的功能:
if($loginok==TRUE)
{
if($rem=="on"){
setcookie('username', $username, time() + (60 * 60 * 24 * 30)); // expires in 30 days
}else if ($rem==""){
$_SESSION['username'] = $username;}
header("Location: index.php");
exit();
}
我建议你重新考虑如何处理记住我的登录,也许你应该想出一个哈希,你可以在cookie中以加密格式存储并在服务器端验证它。这个"hash"
应该在每次访问等时改变。只是一个建议。
function loggedin()
{
if(isset($_SESSION['username'])||(isset($_COOKIE['username'])))
{
$loggedin = TRUE;
return $loggedin;
}