Cookie和Session的区别

来源:互联网 发布:ibatis 打印sql语句 编辑:程序博客网 时间:2024/06/11 08:08

恢复博客

hin久没有写blog了,现在决定恢复。先写两个有趣的事情。

  • 异常处理 try catch
  • 字符串变量

异常处理 try catch

之前处理分享的时候,由于更换了账号名和密码导致报错,这里面一个是前面的逻辑不够严谨,同时并没有利用好PHP的异常处理。

异常处理是一个比较有趣的办法,来防止你逻辑不够缜密犯下更大的错误。如果你代码的逻辑足够严谨,那么实际上if else这些条件判断就可以实现。

之后在,在laravel使用redis的时候,因为laravel的redis连接报错,导致了程序无法运行,也就是如果redis宕了的话,网站就无法运行了,从redis数据的重要性,这个是合理的,但是从网站的正常运营来说,这肯定是不合理的。

所以,直接使用try catch 把不是那么重要的代码保护起来,防止报错。

简而言之,try catch就是用来健壮你的代码。同时要注意,try catch会影响你代码的严谨性。

字符串变量

字符串变量是因为同事想写一个类的统一处理方法的时候,想根据传进入的具体值实现不同的处理。
其实在PHP使用大括号就可以实现{{ }}这个功能

做Web网站,Session和Cookie是没有办法绕过的弯道。
因为HTTP协议是一种无状态协议,但是用户的登录,离线却是有状态的,要想保持这种状态,就引入了Cookie技术。

Cookie是服务器在本地机器上存储的小段文本,并随着每一个请求发送到同一服务器。Web服务器通过HTTP头想客户端发送Cookie,然后客户端解析这些Cookie,并保存到本地文件中。当浏览器请求同一服务器的时候,会自动带着Cookie信息。

简单来说,Cookie就是用来在客户端保持状态的方案,需要用户打开客户端的Cookie支持。

cookie的内容主要包括:名字 值 过期时间 路径 域。路径和域一起构成了Cookie的作用范围。如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie就消失。这种生命期为浏览器会话期被称为会话Cookie。会话Cookie一般存在内容中,不存在硬盘中。如果设置了过期时间,浏览器就会把Cookie存进硬盘中。存储在硬盘上的Cookie,可以被不同的浏览器进程使用(注意:浏览器进程,还是同一个浏览器)。如果是保存在内存中的浏览器,不同浏览器有不同的处理方式。

Session

而session机制采用的是一中在服务器端保存状态的解决方案,主要的优点是安全。由于采用服务器端保持状态的方案在客户端也需要保存一个标志,所以session机制可能需要借助Cookie机制达到保存标志的目的。

Session 是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户的session变量,这个值是这个值是用户的浏览器在访问的时候返回给服务器,当客户禁用Cookie时,这个值也就可能设置为由get来返回给服务器。

当程序需要为某个客户端的请求创建一个session时,服务器首先会检查这个客户端的请求里面是不是已经包含了一个session标志(session_id),如果已包含则说明以前已经为客户端创建过session,服务器就按照session_id检索出来使用,检索不到或者没有session_id,会重新创建一个新的。
保存这个session_id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。但是Cookie可以被人为禁止。必须有其他机制来实现,以便在Cookie禁止时仍然能够把Session_id 传给服务器。

常见的就是URL重写,就是把Session_id直接附加在URL路径的后面,还有一种技术叫做表单隐藏字段。

两者区别

1、存取方式不同

Cookie中只能保管ASCII字符串,Session中能够存取任何类型的数据。

2、隐私策略的不同

Cookie存储在客户端阅读器中,对客户端是可见的,客户端一些程序可能会窥探,复制,甚至修改。Session是存在服务器,不存在敏感信息泄露的风险。

如果使用Cookie,那么敏感的信息如账号密码等尽量不要写到Cookie中。最好,想Google、Baidu那样讲Cookie信息加密,提交到服务器后在进行解密,保证Cookie中的信息只有本人能够读的懂。

3、有效期上的不同

使用过Google的人都晓得,假如登录过Google,则Google的登录信息长期有效。Google会持久地记载用户的登录信息。要达到这种效果,运用Cookie会是比较好的选择。只要设置Cookie的过期时间为一个很大的数字。

由于Session依赖于PHPSESSID的Cookie,这个过期时间要根据具体的PHP设置,PHP中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前Session就会失效。当然如果用户关闭了浏览器,回话也就结束了,Session自然也不存在了!

PHP中Session相关配置

1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传递;

2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递,默认值是“PHPSESSID”;

3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!

4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!

4、服务器压力不同

Session是保管在服务器端的,如果每个用户都会产生一个Session。如果并发用户产生大量的Session,耗费大量的内存。因而,像Google、Baidu、Sina这样并发访问极高的网站,是不太可能运用Session来追踪客户会话的。
而Cookie保存在客户端,不占用服务器资源。并发十分大的时候,Cookie是一个很好的选择。

5、浏览器支持的不同

Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。如果不支持Cookie,使用Url重新技术,那么所有使用到Session的URL的都要进行URL地址重写。

6、跨域支持上不同

Cookie支持跨域访问,Session仅在他所在的域名内有效。