php中关于会话机制的理解

web服务器端与客户端浏览器进行通信时,是基于http协议的.但是http协议是无状态协议,所谓无状态是说本次的http请求与下一次请求是单独的请求,每次请求保存的信息都不会保存.因此会话机制就应运而生,这种机制就是解决这种问题.通过会话机制可以保留通信信息,比如用户的信息保存,因此也实现了用户在使用应用过程中的跟踪,状态的维护.

cookie:
     cookie机制,是可以将访问产生的一段信息保存在客户端浏览器,进行下一次访问的时候,会将该信息带入请求头信息中,将信息
     传递到服务器,从而实现web应用对用户的信息跟踪与维护.

cookie的设置方式:   setcookie(name,value,expire);    //name:cookie名称,  value:cookie值,   expire:cookie的过期时间
             当expire过时间设置为0时,浏览器关闭,就会删除cookie

对cookie信息的获取:   $_COOKIE["name"];

对cookie信息的修改:   $_COOKIE["name"] = value;

删除cookie的两种方式:   
    1> setcookie(name);  //直接删除cookie

2> setcookie(name,value,time()-100);    //设置cookie的过期时间小于当前时间

session:
    session机制,同样能实现保存用户信息和维持请求状态.但是与cookie不同的是,session将保存的信息存放在,web服务器.默认是存放在文件中,在php.ini配置文件中,配置session.save_path可以将session产生的文件存放在该位置,但是需要注意的是,该文件路劲需要httpd进程的写权限比如apache的写权限,否则无法存储session数据.当指定的目录不存在时,服务器不会自动创建,而 是需要手动创建.  session机制在默认情况下,是基于cookie的.也就是说.在使用session_start();初始化时,web服务器会为访问者自动生成一个sessionID 来唯一标识用户,并且将该ID存储在客户端浏览器,以cookie机制来存储,该cookie名称为固定的,默认在php配置文件中session.name配置,值为PHPSESSID.该cookie的值是自动生成的,但是在php中可以使用session_id()获取在浏览器保存的cookie值和session_name()获取在浏览器保存的cookie名称.

而在使用过程中保存的信息,会存放在服务器配置的文件路劲下并且以sess_为前缀,以session_id为结尾命名,比如session id为vp8lfqnskjvsiilcp1c4l484d3,那么session文件名就是sess_vp8lfqnskjvsiilcp1c4l484d3,但是session不仅仅只能基于cookie,因为浏览器可以禁用cookie,如果浏览器禁用后,客户端就不能保存该cookie信息,从而影响session的使用.
        假如浏览器禁用cookie后,我们可以使用下面的途径解决该问题:
    1、设置php.ini中的session.use_trans_sid = 1,当客户端的Cookie被禁用或出现问题时,PHP会自动 把session id附着在URL中,
       这样再通过session id就能跨页使用session变量了
    2、手动通过URL传值、隐藏表单传递session id。
    3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

但是浏览器基本上都不会禁用cookie,因为禁用之后,浏览器访问其他应用时都会出现问题.

设置使用session的方式:
    session_start(); //初始化session

$_SESSION[‘name‘] = value;    // name:要设置的session名称,  value:要设置的session名称对应的值

$_SESSION[‘name‘];        // 获取名称为name的session值

session信息的删除方式:
    需要删除三个地方保存的数据,但是首先需要初始化session   session_start():
    1步: 删除客户端浏览器保存的cookie信息
        setcookie(session_name(),session_id(),time()-100); 或者   setcookie(session_name());

2步: 清空session全局变量
        $_SESSION = array();    或者    session_unset();

3步: 删除session文件
        session_destroy();

总结:
    cookie:通过浏览器第一次访问web应用时通过web服务器调用设置cookie的相关函数比如setcookie(),告诉客户端浏览器设置cookie
     信息,在进行下一次请求web服务器应用时,浏览器就会将保存的用户信息,发送给web服务器.从而实现跨页面获取用户信息.因此也可以说
     用户信息是维护在客户端浏览器的.

session: 在客户端访问服务器时,通过session_start()为客户端分配一个sessionID标识.并且将用户信息保存在客户端文件.当用户
     下次访问web服务器的其他页面时,浏览器会将分配的sessionID以cookie形式串入服务器,服务器获取具有该sessionID标识的文件,从而
     获取到对应的用户信息.

时间: 2024-08-01 04:16:34

php中关于会话机制的理解的相关文章

java中的回调机制的理解(小例子)

这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到.在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数. 正常情况下开发人员使用已经定义好的API,这个过程叫Call.但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让

关于OC中消息转发机制的理解以及在项目中的实际应用

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">关于OC中的消息转发机制想必大家都很了解,现在来温习一下:</span> 一.什么是消息转发? @selector 是什么? 1一种类型 SEL 2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString()   /   NSS

Android中对Handle机制的理解

一.重要參考资料 [參考资料] 眼下来看,以下的几个网址中的内容质量比較不错.基本不须要再读别的网址了. 1.android消息机制一 http://xtfncel.javaeye.com/blog/663517 Android消息机制(一) 一.    角色描写叙述 1.Looper: 一个线程能够产生一个Looper对象.由它来管理此线程里的Message Queue(消息队列). 2.Handler: 你能够构造Handler对象来与Looper沟通.以便push新消息到Message Q

谈谈我对Android中的消息机制的理解之Handler,Looper和MessageQueue的解释

Handler的作用是:发送Message和处理Message,handler发送的Message其实就是发送给自己的对象进行处理,所以谁发送就是谁处理,但是这个绝对有意义,以为这样我们就可以通过Handler将消息的处理从一个线程转到另一个线程了,这个Message几经转手之后,处理它的对象虽然是同一个,但是处理它的线程就变了,变成了创建Handler对象的线程,而不是产生Message对象的线程(当然,这个两个线程可能是一个,但是这样使用handler就是第二个目的了),使用handler的

WCF初探-26:WCF中的会话

理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调用的基础消息交换)必须是同一对话的一部分.如果某个协定指定它允许使用会话但不要求使用会话,则客户端可以进行连接,并选择建立会话或不建立会话.如果会话结束,然后在同一个通道上发送消息,将会引发异常. WCF中的会话机制通过设置服务协定(ServiceContract)上的SessionMode的枚举值

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

Deep Learning基础--理解LSTM/RNN中的Attention机制

导读 目前采用编码器-解码器 (Encode-Decode) 结构的模型非常热门,是因为它在许多领域较其他的传统模型方法都取得了更好的结果.这种结构的模型通常将输入序列编码成一个固定长度的向量表示,对于长度较短的输入序列而言,该模型能够学习出对应合理的向量表示.然而,这种模型存在的问题在于:当输入序列非常长时,模型难以学到合理的向量表示. 在这篇博文中,我们将探索加入LSTM/RNN模型中的attention机制是如何克服传统编码器-解码器结构存在的问题的. 通过阅读这篇博文,你将会学习到: 传

RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)

RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题) 对于使用ViewHolder引起的图片错乱问题,相信大部分人都有遇到过,我也一样,对于解决方法也有所了解,但一直都是知其然不知其所以然. 所以,这次直接把ViewHolder的工作原理,通过简单的demo代码来验证一次,验证后对于图片错乱和闪烁这种问题的成因就很清楚了. 下面先上一副图 这幅图就比较清晰的画出了ViewHolder的工作原理. 可以看到,图中左上角item1上面有一条蓝色的线,item7下面也有

SQL Server 内存中OLTP内部机制概述(二)

----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory OLTP Internals Overview>:http://technet.microsoft.com/en-us/library/dn720242.aspx 译者水平有限,如有翻译不当之处,欢迎指正. ----------------------------我是分割线---------------