http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
说session.cookie_lifetime为0"直到浏览器关闭".这是会话可以拥有的绝对最大长度(当浏览器关闭时总是擦除),或者设置一个session.cookie_lifetime,例如,23243245234,结果可能会在浏览器关闭时持续超过?
更重要的是,我需要设置什么样的php.ini设置才能使会话在两天内完成,并且是否有安全理由推荐一定的(我希望更低)时间限制,如果是这样的话推荐的时间段是?
预期的行为 编辑:这是我想要实现的,也许我将能够通过获取一些设置建议而不是php.ini设置的特定值来理解行为:
我希望会话尽可能长,最多(大约)两天.如果会话可以持续超出浏览器关闭,我希望它能够这样做(最多大约两天).
我将为php.ini设置设置什么(是的,我有直接编辑访问php.ini)来实现这一点?
我想知道我们是否可以为一个特定项目而不是整个Web服务器声明session.gc_maxlifetime设置.htaccess?
如果是这样,我们怎么做?像下面的代码?
php_value session.gc_maxlifetime 2000
我已经尝试了它并且它不起作用,我也在php.ini我的项目的同一目录中创建了一个文件,它也没有用.
谢谢.
设置会话 cookie 的语法
session_set_cookie_params($lifetime, $path, $domain, $secure, true);
Run Code Online (Sandbox Code Playgroud)
Q1. 像下面这样设置会话 cookie 是否安全还是还有更多工作要做?
session_set_cookie_params('3600', 'www.example.com', isset($_SERVER["HTTPS"]), true);
Run Code Online (Sandbox Code Playgroud)
Q2。设置会话(从安全角度来看)cookie 的理想生命周期应该是多长?
Q3。如果我决定将我的网络管理文件夹转移到子域,那么上面的代码是否需要更改?
为了更优雅地处理过期的PHP会话,我在PHP代码中插入了以下内容:
$sessionLifeTimeInSeconds = ini_get ("session.gc_maxlifetime");
echo '<script type="text/javascript">' . "\n" .
' setTimeout (function () {' . "\n" .
' alert ("Your login session will expire in 3 minutes.");' .
"\n" .
' }, ' . ($sessionLifeTimeInSeconds - 180) * 1000 . ');' . "\n" .
'</script>' . "\n\n";
Run Code Online (Sandbox Code Playgroud)
哪个有效.但是,现在我注意到在单击javascript警报上的"确定"按钮并且没有任何进一步的活动之后,当达到超时(在这种情况下默认为24分钟)时,会话不会过期.
警报弹出框是否应该延长会话?如果是这样,可以避免这种情况,如果是这样,怎么办?
我在Ubuntu Linux上使用的是Firefox 44.0,如果它完全相关的话.
谢谢你的回复.我已经更新了我的PHP会话代码.
我已经摆脱了用户代理检查,因为@Rook已经向我展示了逻辑中的缺陷.
不幸的是我通过编辑它搞砸了原来的问题,现在我无法回复对不起的家伙,但@Rook确实解决了我原来的问题.
再次感谢您的帮助,daza166
我创建了一个脚本login.php,在那里我创建了一个名为的会话变量logged_in
$_SESSION['logged_in'] = true;
Run Code Online (Sandbox Code Playgroud)
由于不活动,会话到期后我无法找到重定向到重定向到我的logout.php的方法.我也应该把使这个会话变量到期的代码.我已经用Google搜索了这个错误,它建议php.ini在大多数文章中调整文件.但是我发现一篇文章说这不是最好的做法.
我在StackOverflow上找到了以下代码,但我不知道在哪里放它: -
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
Run Code Online (Sandbox Code Playgroud)
我想知道会话到期后重定向的最佳方法以及放置代码的位置的建议.
编辑:我忘了提到我想知道如何手动设置会话到期的时间.
先感谢您
当你在某个限制之后过期时会发现许多互联网上的教程,比如在30分钟左右之后,但是我希望在没有活动的情况下使会话过期,引用一个着名的SO问题解决方案是直截了当的:
if (isset($_SESSION['LAST_ACTIVITY'])
&& (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
Run Code Online (Sandbox Code Playgroud)
但我是否必须更新$_SESSION['LAST_ACTIVITY']每个请求?
预先假设的答案是肯定的,但我有一个包含200多个php页面的大型网站$_SESSION['LAST_ACTIVITY'],每次请求都需要更新.
有没有其他方法这样做?所有文件中唯一常见的是一个用于数据库连接的配置文件.
当用户关闭浏览器时,我的php会话设置为过期,但我注意到如果我将浏览器长时间打开(例如24小时以上),会话仍然存在.
有没有办法可以让这些会话在浏览器关闭或延长一段时间后到期?
我有一个网站,如果登录成功,我会创建一个UserID的会话.
$email = mysql_real_escape_string($_POST["email"]);
if(LOGIN SUCCESSFUL) {
$_SESSION['userID'] = $email;
}
Run Code Online (Sandbox Code Playgroud)
然后在我将任何数据输入MySql的整个站点中,我插入了user_id $_SESSION['userID']
我不知道它有多安全,如果没有,请告诉我任何安全的方法来做这一切.