如何使用cookie登录一个登录脚本,例如我想检查访问者是否登录而不查询数据库。
例如,我希望在首页上显示一些仅适用于登录用户的菜单。
所以我必须做if(isLoggedIn())显示菜单。但这是每次页面加载时的查询,因此它不是很好
有什么建议吗?
答案 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中的时间是否在最后一小时内(或您配置的任何时间段)并且哈希值有效。它可以被欺骗一个小时,你需要以其他方式检查合法会话,但它可能只是基于菜单的东西。