微信扫一扫打赏支持

php开发面试题---禁用cookie之后,如何使用session

php开发面试题---禁用cookie之后,如何使用session

一、总结

一句话总结:

在每个url后面自动加上PHPSESSID的值即可,用户禁止cookie后,服务器仍会将sessionId以cookie的方式发送给浏览器

 

1、用户禁止cookie后,服务器的sessionId还会发给用户么?

会:服务器仍会将sessionId以cookie的方式发送给浏览器,但是,浏览器不再保存这个cookie(即sessionId)了。

 

2、如何设置才能在每个url后加上sessionId的值?

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

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

 

3、session的生命周期中特别注意的?

只要活动就不会过期:session是一个只要活动就不会过期的东西,只要开启cookie,每一次会话,session_id都不会改变

 

 

 

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

参考或转自:禁用cookie后如何使用session还有session_id的使用 - 方方土zekeny - 博客园
https://www.cnblogs.com/zekeny/p/6708152.html

    (1)如果用户禁止cookie,服务器仍会将sessionId以cookie的方式发送给浏览器,但是,浏览器不再保存这个cookie(即sessionId)了。



    (2)如果想继续使用session,需要采取其他方式来实现sessionId的跟踪。

        可以使用url重写来实现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);

 

三、用户禁止cookie后,如何继续使用session

参考或转自:用户禁止cookie后,如何继续使用session - 龙腾四海365的专栏 - CSDN博客
https://blog.csdn.net/u011637069/article/details/49870497

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

解决cookie禁用然后引用session的方法。

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攻击。

 

 

 

 

 

 
posted @ 2019-06-17 21:22  范仁义  阅读(4525)  评论(0编辑  收藏