创建安全的PHP会话cookie

use*_*449 3 php cookies session

我正在尝试将存储php会话ID的php会话cookie设置为安全(https)和仅http.

$name = session_name();
setcookie($name, $_COOKIE[$name], 0, '/', 'domain.com, 1, 1);
Run Code Online (Sandbox Code Playgroud)

我在会话开始之前调用上面的代码.问题是它创建了两个cookie.一个安全的,我想要的方式,然后它创建一个没有ssl或http-only的常规cookie.两个cookie都具有相同的值.

有没有办法告诉php创建安全(ssl)和http-only会话cookie?

而且,而不是提出另一个问题.由于我们处于同一主题...用户可以修改$_SESSION变量吗?我知道他们可以在他们的最后操纵会话ID,但是想知道是否$_SESSION安全存储最终用户不能随意修改的用户ID.

hak*_*kre 8

PHP会在您调用时为您创建cookie session_start(),这就是原因.

您可以使用该session_set_cookie_params功能或在您的内部配置该cookie php.ini.

session_set_cookie_params($lifetime = 0, $path = '/', $domain, $secure = true, $httponly = true);
Run Code Online (Sandbox Code Playgroud)

只需配置和删除您自己的setcookie呼叫,它就是多余的.

用户可以修改$_SESSION变量吗?

不,他们只能编辑cookie中的数据.这通常会导致会话失败(或者如果幸运的话,可以获得其他人的会话).

这就是为什么如果用户想要更改她/他的密码,您需要再次询问当前密码.同样重要的一切.

在成功登录或注销后,更改会话ID:

session_regenerate_id();
Run Code Online (Sandbox Code Playgroud)

注销:

session_regenerate_id(true);
Run Code Online (Sandbox Code Playgroud)