PHP cookie和会话问题

时间:2010-02-14 15:08:07

标签: php cookies session

如何使用cookie登录一个登录脚本,例如我想检查访问者是否登录而不查询数据库。

例如,我希望在首页上显示一些仅适用于登录用户的菜单。

所以我必须做if(isLoggedIn())显示菜单。但这是每次页面加载时的查询,因此它不是很好

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

你可以这样做:

session_start();

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['loggedIn'])) {
  $_SESSION['loggedIn'] = true;

  // Add all the relevant user information data
  $_SESSION['username'] = $username;
  $_SESSION['password'] = $password;
  $_SESSION['etc'] = $etc;
}

然后,您可以向$ _SESSION全局数组请求用户数据。 例如:请求用户是否登录(不要忘记先调用session_start()):

function isLoggedIn() {
    return (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn']);
}

如果您想退出:

session_destroy();

可以在php.ini文件中处理超时:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

或者您可以使用ini_set在运行时处理ini变量:

ini_set('session.gc_maxlifetime', $sessionMaxLifeTime);

答案 1 :(得分:0)

您可以使用函数setcookie创建Cookie并使用此函数检查Cookie loggedIn是否已设置且不是false。 :)

function isLoggedIn() {
    return (isset($_COOKIE['loggedIn']) && $_COOKIE['loggedIn']);
}

答案 2 :(得分:0)

你可以在php中使用会话。添加session_start();登录后,您的页面可能会对数据库在会话中设置一个标记。

// user logged in sucessful
$_SESSION['logged_in'] = true;

检查您的网页:

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
 // display menu item
}

答案 3 :(得分:0)

登录后立即使用http://php.net/manual/en/function.setcookie.php设置标志,然后使用$ _COOKIES检查此标志。或者,您可以将此标志设置为$ _SESSION,然后在那里进行检查。

答案 4 :(得分:0)

PHP的$ _SESSION是基于文件的,所以如果你使用它就没有数据库命中(虽然数据库几乎总是比文件查找更快,所以这可能不是那么有用)。

您可以使用内存缓存,例如memcached。

或者,为了安全性稍差,您可以使用时间和哈希存储第二个cookie。当你发出它时,你连接当前时间和只有你的应用程序逻辑知道的秘密盐,然后是md5()或sha1()它。每次浏览时,您只需检查cookie中的时间是否在最后一小时内(或您配置的任何时间段)并且哈希值有效。它可以被欺骗一个小时,你需要以其他方式检查合法会话,但它可能只是基于菜单的东西。