我正在尝试使用Cookie来维护我网站上的登录持久性。但是,由于某些我不知道的原因,cookie尚未创建。仅创建会话。我正在使用Sessions来跟踪已登录的用户,并使用Cookie在他们回来时重新创建会话。我做错了什么?
创建会话和cookie:
<?php
$connect= // connect variables
$query= "SELECT * FROM users where email= '$email' AND password=
'$password'";
$result= mysqli_query($connect, $query)
or die('error with query');
if (mysqli_num_rows($result) == 1) {
$row= mysqli_fetch_array($result);
session_start();
$_SESSION['id']= $row['user_id'];
$_SESSION['name']= $row['fname'] . " " . $row['lname'];
setcookie('id', $row['user_id']);
$profile_url= 'http://'. $_SERVER['HTTP_HOST'] .
dirname($_SERVER['PHP_SELF']) . '/profile.php';
header('Location:profile.php');
}
else {
$message= "Incorrect email/password combination.";
}
?>
检查cookie以恢复会话:
<?php
session_start()
/* if a session does not exist, see if a cookie does to set the session */
if (!isset($_SESSION['id'])) {
if (isset($_COOKIE['id'])) {
$_SESSION['id'] = $_COOKIE['id'];
}
else {
}
}
?>
修改
我需要为cookie添加一个过期参数!
setcookie('id', $row['user_id'],time()+86400);
Note: The above example sets the cookie for 1 day
答案 0 :(得分:5)
已创建Cookie,但您创建的时间为0秒。第三个参数是$ expire,使用它......
http://php.net/manual/en/function.setcookie.php
$ expire quote
Cookie过期的时间。这是一个Unix时间戳,所以数量也是如此 自纪元以来的几秒钟。换句话说,你很可能会设置 这与time()函数加上你之前的秒数 希望它过期。或者你可以使用mktime()。时间()+ 60 * 60 * 24 * 30会 将Cookie设置为在30天后过期。 如果设置为0,或省略,则 cookie将在会话结束时(浏览器时)到期 关闭)。强>
答案 1 :(得分:3)
你在这里缺少一些东西(到期,路径,域名):
setcookie('id', $row['user_id'],time()+86400,"/",".your_domain.com");
注意:上面的示例在域的根目录中为域“your_domain.com”设置cookie 1天。现在这就是很多领域!
答案 2 :(得分:2)
我需要在Cookie中添加过期日期。
setcookie('id', $row['user_id'],time()+86400);