我想在php中扩展会话超时
我知道可以通过修改php.ini文件来实现.但我无法访问它.
那么有可能只用PHP代码吗?
有人可以告诉我我的会话将持续多长时间从下面的数据? - 我不确定哪一个告诉我
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/session /var/lib/php/session
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off …Run Code Online (Sandbox Code Playgroud) 要解释我的问题,我必须添加一些上下文信息:
我们有一个网站,它与会话一起工作,已经工作了7年没有任何问题,除了我们的服务器管理员,他无法登录,我们从来不知道为什么......直到现在......
我们的服务器管理员正在度假,所以我不得不做他的一些工作,它包括登录ISP Config,它位于同一服务器和域使用不同的端口(8080),我在那里登录,检查一些值,然后当我回到我们的网站时,我无法登录,就像我们的服务器管理员一样.
做一些调试我发现在每次刷新session_id()更改时会话都有问题.
使用ini_get我得到session.cookie_domain并且session.cookie_secure是空的.
如果我做了一个print_r($_COOKIE)没有PHPSESSID,如果我把它设置为任何值,它消失,即使我写了一个很长的到期它没有保存,如果我设置2个像这样的cookie:
setcookie("PHPSESSID", "MYSESSION", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
Run Code Online (Sandbox Code Playgroud)
然后print_r($_COOKIE);我明白了:
Array ( [a] => b )
Run Code Online (Sandbox Code Playgroud)
我没有任何.htaccess,所以我身边没有规则,似乎ISP配置中的某些内容改变了我存储cookie的方式.
我可以在webmasters.stackexchange.com上询问,但是当有人登录ISP配置后登录我的网站时,我需要一个PHP答案来设置新值.
这是我目前要测试的代码:
<?php
session_set_cookie_params(3600,"/");
session_start();
//$_SESSION[b_id]=1;
setcookie("PHPSESSID", "GTS", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
echo "<div>b_id: $_SESSION[b_id]</div>";
echo "<div>session_id: ".session_id()."</div>";
echo "<div>cookie_domain: ".ini_get('session.cookie_domain')."</div>";
echo "<div>save_path: ".ini_get('session.save_path')."</div>";
echo "<div>cookie_secure: ".ini_get('session.cookie_secure')."</div>";
print_r($_COOKIE);
/*echo "<pre>";
print_r(ini_get_all());
echo "</pre>";*/
?>
Run Code Online (Sandbox Code Playgroud)
这是输出,(session_id值每次都改变):
b_id:
session_id: du95eljbkct54qktvcd18a7ej0
cookie_domain:
save_path: /var/lib/php/sessions …Run Code Online (Sandbox Code Playgroud) 如果用户在10分钟内不执行任何操作,我已将应用程序配置为在超时时关闭会话.在config.yml我有这样的:
session:
handler_id: ~
cookie_lifetime: 600 # 10 minutes
gc_maxlifetime: 600 # 10 minutes
gc_probability: 1
gc_divisor: 1
Run Code Online (Sandbox Code Playgroud)
我每隔一分钟进行一次Ajax调用,以检查会话是否即将到期或不会过期,这是我检查的内容:
public function isLoggedInAction(Request $request)
{
$response = array();
$response['authenticated'] = FALSE;
$status = 200;
$securityContext = $this->container->get('security.context');
if ($securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
$response['authenticated'] = TRUE;
}
return new JsonResponse($response, $status ?: 200);
}
Run Code Online (Sandbox Code Playgroud)
由于一些不知情的原因不起作用,每10分钟会话都关闭,无论我是在使用页面还是不在,为什么?我错过了什么?
编辑1尝试新值,仍然无效:
session:
handler_id: ~
cookie_lifetime: 1800
gc_maxlifetime: 600
gc_probability: 1
gc_divisor: 100
Run Code Online (Sandbox Code Playgroud)
当我在页面上工作,执行Ajax调用和一些其他任务时,会话已关闭,因此无法正常工作.显然对我来说唯一有用的价值就是设置cookie_lifetime: 86400 #1 day,这对我来说很疯狂!
编辑2在 …
可能重复:
PHP会话快速超时
在我设置的.htaccess文件中
php_value session.gc_maxlifetime 14400
Run Code Online (Sandbox Code Playgroud)
即4小时
如果我确认使用echo ini_get('session.gc_maxlifetime');我得到14400.但我的会话仍然会在不到2小时内到期.
你认为这里出了什么问题?任何帮助赞赏.谢谢