PHP基础(谈一谈Session&Cookie)

Posted whel0923

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP基础(谈一谈Session&Cookie)相关的知识,希望对你有一定的参考价值。

 

cookie和sessiond的主要区别

 

(1)、保存位置稍有区别

 

cookie数据存放在客户的浏览器上,服务器端不用保存。session数据放在服务器上,本地内存也有一份。

 

(2)、安全性不同

 

cookie安全性不如session。因为普通cookie保存在本地硬盘上,黑客可以伪造url等方式发起xss攻击,获取本地硬盘保存状态的cookie,进而窃取用户的敏感信息。

 

session则不同,只有在用户登录此网站时发起xss攻击才能获取session信息,关闭浏览器之后,session即被销毁,安全性较cookie要好

 

(3).跨域支持上的不同

 

Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

 

(4).服务器压力的不同

 

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。考虑到减轻服务器性能方面,应当使用COOKIE。

 

(5). 存取方式的不同

 

Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。

 

Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。

 

(6).   cookie的保存内容大小有限制,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

(7):session的运行依赖session id ,而session id是存在cookie中的,也就是说如果浏览器禁用了cookie,同时session也会失效,(但是可以通过其他方式实现session ,比如在url中传递session id)

(8):session 可以放在文件,数据库,或者是内存中,默认是存储在文件中,都可以

(9):用户验证一般都会用session

 

 

  $_COOKIE    浏览器cookie的操作

 

          设置cookie:setcookie(name, value, expire, path, domain);

 

          获取cookie$_COOKIE["user"];

 

          删除cookiesetcookie("user", "", time()-3600);//设置过期时间

 

 

  $_SESSION  服务端session的操作

 

          使用session前一定要session_start()启动session

 

          储存session$_SESSION["name"]="King";//数组操作

 

          销毁sessionunset($_SESSION["name"]);//销毁一个

 

          session_destroy()unset($_SESSION);//销毁所有的session

 

 

 

Cookie概念

 

      在浏览某些 网站 ,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能.

 

cookie伪造

你的第三方应用端的cookie被恶意的用户截取到,然后向服务器端发送,并且通过验证,他们就会冒充用户进行登录,这就是cookie伪造

cookie伪造:

现在更通用的做法是使用session来标识用户,也就是说我们为每个第三方应用端生成一个唯一的id,然后在服务端存储这个id所对应的状态。

这样cookie里面仅仅保存了这个id,而没有任何其他的东西。而且这个id往往还有个特性,它是随机生成,且每次登陆都会产生一个新的。这样就更降低了信息泄漏的风险。

 

Session的概念

   Session 是存放在服务器端的类似于HashTable结构来存放用户数据;

   作用:实现网页之间数据传递,是一个存储在服务器端的对象集合。

   原理:当用户请求一个Asp.net页面时,系统将自动创建一个Session;退出应用程序或关闭服务器时,该Session撤销。系统在创建Session时将为其分配一个长长的字符串标识,以实现对Session进行管理与跟踪。

 

客户端禁掉 cookie后session还能用吗

Cookiesession都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的状态,需要有这么一个机制----会话机制。

Cookie:将会话信息的保存到浏览器端。Session:将会话信息保存到服务器端。

session默认情况下是基于cookie的,对于session来说,每生成一个sessionid,都会将其发送到浏览器端,让后将其保存到cookie当中。

一般Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。

但是可以通过其他方式来存储sessionID,eg:redis或文件里。

在存储session的文件中,生成sessionID,通过get传参的方式将sessionID传到要实现session共享的页面,读取sessionID,从而从session中获取数据。

 

 

session默认的生存时间

 

php中session过期时间设置   

 

1、修改php配置文件中的session.gc_maxlifetime

 

2、?php
    session_start();
    // 保存一天
    $lifeTime = 24 * 3600;
    setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>

 

3、其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用:
?php
    // 保存一天
    $lifeTime = 24 * 3600;
    session_set_cookie_params($lifeTime);
    session_start();
    $_SESSION["admin"] = true;
?>

 

session_id 和 服务器的session文件的关系

Session_id 和session同时生成,并且session文件是以session_id所命名

 

php在储存session以什么形式存在

PHP为session的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输出的冗余.我们可以在php.ini更改配置文件或者php脚本中通过相应的函数来设置session文件的存储类型来改变session文件的存储形式

 

               比你优秀的人不可怕,可怕的是比你优秀的人比你更努力

 

 

以上是关于PHP基础(谈一谈Session&Cookie)的主要内容,如果未能解决你的问题,请参考以下文章

谈一谈购物车

谈一谈分布式会话

谈一谈跑PHP计划任务

来谈一谈如何解决关键基础设施网络安全困境?

谈一谈原生JS中的面向对象思想

js之存储