我正在尝试获取存储php会话ID的php会话cookie为安全(https)和仅http。
$name = session_name();
setcookie($name, $_COOKIE[$name], 0, '/', 'domain.com, 1, 1);
我在会话开始前调用上面的代码。问题是它创建了两个cookie。一个安全的,我想要的方式,然后它创建一个没有ssl或http-only的常规cookie。两个cookie都具有相同的值。
有没有办法告诉php创建安全(ssl)和http-only会话cookie?
此外,而不是提出另一个问题。由于我们处于相同的主题...用户可以修改$_SESSION
个变量吗?我知道他们可以操纵会话ID,但是想知道$_SESSION
是否安全存储最终用户不能随意修改的用户ID。
答案 0 :(得分:8)
PHP在您致电session_start()
时为您创建了cookie,这就是原因。
您可以使用session_set_cookie_params
功能或php.ini
内部配置该Cookie。
session_set_cookie_params($lifetime = 0, $path = '/', $domain, $secure = true, $httponly = true);
只需配置并删除您自己的setcookie
电话,这是多余的。
用户可以修改
$_SESSION
个变量吗?
不,他们只能编辑cookie中的数据。这通常会导致会话失败(或者如果他们幸运的话,会得到其他人的会话)。
这就是为什么如果用户想要更改她/他的密码,您需要再次询问当前密码。同样重要的一切。
成功登录或退出后,change the session id:
session_regenerate_id();
注销:
session_regenerate_id(true);