创建安全的PHP会话cookie

时间:2011-10-07 23:25:07

标签: php session cookies

我正在尝试获取存储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。

1 个答案:

答案 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);