这个是网上找的资料,但是我自己写了一个代码,放在linux下,任然可以在http下获得session,代码如下
ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
$_SESSION['token']='sdfdsfds';
var_dump($_SESSION);
//可以获取session的值
按照网上的说法应该设置不了session,但是实际却是可以获取,求解答,谢谢!
这个是网上找的资料,但是我自己写了一个代码,放在linux下,任然可以在http下获得session,代码如下
ini_set('session.cookie_secure', 1);
ini_set('session.cookie_httponly', 1);
$_SESSION['token']='sdfdsfds';
var_dump($_SESSION);
//可以获取session的值
按照网上的说法应该设置不了session,但是实际却是可以获取,求解答,谢谢!
session和cookie是不一样的
session存储在服务器,cookie存储在客户端
设置cookie:
function setcookie ($name, $value = null, $expire = null, $path = null, $domain = null, $secure = null, $httponly = null) {}
获取cookie:
$_COOKIE[$sCookieName];
题主的写法只是操作了服务器端的session,并没有向浏览器发送cookie
session.cookie_secure 使得cookie是否可以通过https传输,改向设置为1则仅可以通过https传输cookie
session.cookie_httponly 使得cookie是否可以被客户端js等进行操作,该项设置为1则仅能够通过http请求访问cookie
====================更新===================
测试了题主的写法,session需要cookie来保存会话id,如果配置禁止了http写cookie的权限的话
那么每次交互响应头都会发送set-cookie命令,且会话id每次都会重新生成
而由于当前请求内$_SESSION是超全局变量,其内容在当前上下文是存在的,所以是可以正确获取到的
并且客户端和服务器交互请求头会发送sessionid来唯一识别本次会话,如果客户端不能够存储cookie
则服务器不能够查找到当前交互设置的session,也就是说当前请求设置的session仅存在于当前上下文,
下一个请求到来时,由于请求头没有携带上次会话的sessionid,就无法识别相应的session,上次请求设置的session相当于不存在,由于服务器端session存储在文件中,那么每次交互都会在session.save_path产生新的sess_j9pul3sdggncaas6luc4cild95文件,这样会耗尽服务器资源
15 回答7.4k 阅读
4 回答13.8k 阅读✓ 已解决
5 回答8.2k 阅读✓ 已解决
1 回答9.9k 阅读✓ 已解决
3 回答7.4k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
5 回答5k 阅读
之所以你能获取到,因为SESSION在当前上下文是存在的。
你这里服务器设置了COOKIE,但是COOKIE还没有发送给客户端,HTTP协议中会在返回的HEADER通过SET-COOKIE告诉客户端当前服务端需要本地写入哪些COOKIE,这中间就存在你问题所提出的客户端根据当前是HTTP还是HTTPS选择是否可接受COOKIE写入,默认情况下都能接受。
你客户端第二次访问服务器会带上本地的有效COOKIE在HTTP头中,若之前返回的COOKIE没有被接受那么自然服务器就获取不到COOKIE了。
你可以试试
如果HTTP访问,则第一次的
var_dump
会没有值。参考下:
http://blog.csdn.net/whq19890...
https://www.cnblogs.com/luozh...
https://stackoverflow.com/que...