cookie和session

SESSION与COOKIE区别是什么?用途、作用范围、生命周期?

存储位置:
cookie : 存储用户浏览器上,用特定方式加密处理了。
session: 通常放置在服务器环境,tmp目录下,Linux系统一般在 /tmp

存储介质:都是以文本的形式(不能存储太多)
cookie:浏览器每次访问网站,都要读取加载cookie文本
session:读取session要去寻找opendir、readdir

储存的大小、数量
cooke 大概4kb 30-50个数量
session 理论上没有限制,存多也会慢,所以很多大型的网站会用内存来储存(redis、memcache);

储存的类型
-cookie 常用来存标量bool(布尔型)\int(整形)\float(浮点)\string(字符串),数组和对象=>序列化json
-session 都可以

储存方法
setcookie(name,value,time()+有效时间,有效路径,有效域名)
session_start() 使用session前,需要开启
$session[name] = value

读取接收
$_COOKIE
$_SESSION

生命周期
cookie
1.没有设置第三个参数,浏览器关闭即失效
2.设置了time()+t t时间后会失效

session
1.如果浏览器关闭。当前会话结束。但是session数据并不会失效
2.SESSION不能区分路径,同一用户在访问一个网站期间,所有的SESSION在任何一个地方都可以访问到
3.如果24分钟(php.ini)一直没有操作过该数据,这个数据会认为失效,但是文件还在
4.每次页面的session_start() 都会触发一个失效机制,默认是1/1000的概率会删除失效的session文件

安全性
因为储存位置的关系,session相对安全
cookie存浏览器上,所以较为重要的数据,要做加密处理,虽然可以加密,但还是不推荐把密码等重要用户信息存储在cookie中

延伸的问题

1、禁用cookie后如何使用session还有session_id的使用

2、session依赖cookie,用户把cookie禁用了,如何继续使用session?

答 1:

  • 1、如果用户禁止cookie,服务器仍会将sessionId以cookie的方式发送给浏览器,但是,浏览器不再保存这个cookie(即sessionId)了。
  • 2、如果想继续使用session,需要采取其他方式来实现sessionId的跟踪。
  • 3、url重写
    a,什么是URL重写
    浏览器在访问服务器上的某个地址时,不能够直接写这个组件的地址,而应该使用服务器生成的这个地址。
    比如,
    <a href="some">someServlet</a> error
    <a href-"<%=response.encodeURL("some")%>"></a>
    encodeURL方法会在"some"后面添加sessionId。

    b,如何进行url重写。
    encodeURL方法用在链接地址、表单提交地址。
    response.encodeURL(String url);
    encodeRedirectURL方法用于重定向地址。
    response.encodeRedirectURL(String url);
    可以使用url重写来实现sessionId的跟踪。
    5.session_destroy--关闭并销毁一个会话中的全部数据

答 2:

cookie session 统称为会话,session存在于服务器端,cookie存在于用户端。之前有人说过如果禁用了cookie那么session就使用不了了,可以说这是正确的,也可以说这是错误的。因为禁用了cookie,session_id就不能保存,而服务器正是根据session_id来判断用户的session,所以说这是正确的。经过测试,当我们禁用cookie时,刷新页面session_id会改变,说明session_id是用cookie保存的。

两个解决方法:

1 、session.use_cookies = 0 //设置客户端是否使用cookie来保存session值 该参数的值不影响上述机制的进行。

但是为了验证该机制,这里把该参数设为0,排除cookie携带seesionid的可能

session.use_only_cookies = 0 //是否只使用cookie来保存session值 该参数为1时,上述机制失效。

设置session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项

这样他会在每个url后面自动加上PHPSESSID的值,然后正常使用session就可以了。

----------------------------------------------------------------------------
2 、在url后面加上session_id的值或者保存session_id的值于数据库或redis中,然后在下一次要调用session前,运行session_id($session_id),还有这条语句要在session_start()前。

再聊下session_id吧,它是保存在cookie中,首先session是一个只要活动就不会过期的东西,只要开启cookie,每一次会话,session_id都不会改变,我们可以根据session_id来判断用户是否是正常登陆,防止用户伪造session。然后我们也要防止session被劫持,我们可以对session_id进行再一次的加密,防止暴力破解,还有可以设置HttpOnly。通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值