[英]PHP cookies and sessions problem
我该如何做一个使用Cookie进行登录的登录脚本,例如,我想检查访问者是否已登录而不查询数据库。
例如,我希望在首页上仅显示某些已登录用户的菜单。
所以我必须做if(isLoggedIn())显示菜单。 但这是每次页面加载时的查询,因此效果不是很好
有什么建议么?
你可以这样做:
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);
您可以使用函数setcookie来创建cookie,并使用此功能来检查loggedIn
是否已设置且不是false。 :)
function isLoggedIn() {
return (isset($_COOKIE['loggedIn']) && $_COOKIE['loggedIn']);
}
您可以为此使用php中的会话。 添加session_start(); 登录后,可能会针对数据库在会话中设置一个标志。
// user logged in sucessful
$_SESSION['logged_in'] = true;
比检查您的页面:
if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
// display menu item
}
登录后立即使用http://php.net/manual/zh-CN/function.setcookie.php设置标志,然后使用$ _COOKIES检查该标志。 或者,您可以将此标志设置为$ _SESSION,然后在此处进行检查。
PHP的$ _SESSION是基于文件的,因此如果您使用数据库,则不会对数据库造成任何影响(尽管数据库几乎总是比文件查找快,因此可能没有什么用处)。
您可以使用内存缓存,如memcached。
或者,为了降低安全性,您可以存储带有时间和哈希值的第二个cookie。 发出它时,您将当前时间与只有您的应用程序逻辑知道的秘密盐串起来,然后对其进行md5()或sha1()。 每次浏览时,您只需检查Cookie中的时间是否在最后一个小时内(或您配置的任何时间段)内,并且哈希有效。 它可能会被欺骗一个小时,并且您需要以其他方式检查合法会话,但仅基于菜单的内容就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.