使用cookie维护PHP session_start()

时间:2011-07-19 13:11:10

标签: php session cookies session-cookies

我有一个使用session_start()启动会话的PHP代码。好吧,在用户登录后,将被带到profile.php,其中显示了该用户信息。但是当用户重新加载页面时,会话就消失了。有什么办法可以让我维持一个小时吗?我尝试过cookie,但我不知道怎么告诉PHP会话已经启动了。谢谢!

Cookie和会话开始的Profile.php代码:

if(isset($HTTP_COOKIE_VARS['session'])){ 
     session_start();
} else {
    header('Location: index.php');
}

登录代码:

session_start();

$_SESSION['pass']  = $password;
header('Location: ../profile.php');
setcookie("session","1",time()+3600,"/");

检查会话的代码:

if($_SESSION['pass'] == $tableArray[0]['password']) {
    $username = $tableArray[0]['name'];
    $avatar = $tableArray[0]['avatar'];
} else {
    header('Location: index.php');
}

我在这里调用了session_destroy():

<li><a href=<?php session_destroy(); echo "index.php"?>>Logout</a></li>

忘了PHP在HTML之前运行:P就是问题!

5 个答案:

答案 0 :(得分:3)

  • 您没有再次调用session_start()或
  • 你正在调用session_destroy();文件中的任何地方

答案 1 :(得分:1)

从技术上讲,我找到了解决方案。

已经指定了一项更改保存路径字符串,否则会更改存储会话的目录的权限。

我这样做对我有用。

如果您的会话存储在会话目录中,请执行以下操作:

chmod 777 session/

答案 2 :(得分:0)

我怀疑您没有在session_start()上再次致电profile.php

您必须在将访问会话数据的每个脚本上调用session_start()

代码发布后更新

而不是检查是否存在会话cookie,而是执行以下操作:

// Start the session first
session_start();
if (isset($_SESSION['username'])) {
  // user is already logged in
} else {
    header('Location: index.php');
}

答案 3 :(得分:0)

尝试将session.use_cookies设置为开启(在php.ini / .htaccess中)

答案 4 :(得分:0)

您必须在需要了解会话数据的每个脚本的顶部说session_start()

会话cookie实际上不是你关注的问题,你应该考虑一个“实现细节”。 (在浏览器退出之前,cookie通常会存在于用户的浏览器中。)