zoukankan      html  css  js  c++  java
  • php session小节

    1.为什么要用session?

    在人们访问网站的时候,有很多个网页,由于http自身的特点,用户每执行一个脚本都需要和web服务器重新建立连接。由于他们之间是无状态的,这次的连接无法得到上次连接的状态(一个脚本可能有多个网页,按网页来算)。这用,用户在一个脚本中对变量赋值,在其它的脚本中无法得到这个值。而session的作用就是一个全局变量,对session赋值在各个脚本中都可以使用。

    2.session的特点

    session的产生与用户(或浏览器,对同一个网站ie 和chrome会产生不同的session)服务器(或网站)都有关。不同的客户或浏览器访问相同的网站或服务器(其实是看服务器的,如果一个网站正常产品跟团购产品是放在两个服务器上,则他们的session是存在于各自的服务器上的。这种情况下就需要做session共享。)产生不同的session,相同的客户访问不同的服务器也会产生不同的session。例如A用户通过Session定义了一个全局变量$user=“wind”中,而B用户通过Session定义的全局变量$user=“jane”。那么在A用户所访问的脚本中,$user的值就是wind。

    3.php中session的保存

    session是以文件的形式保存在服务器端的。php.ini中有个配置项 session.save_path= "";这个里面填写的路径,将会使session文件保存在该路径下。session文件的命名格式是:"sess_[PHPSESSID]"。每一个文件里面都保存了一个会话(session)的数据。其实只要使用代码$_SESSION['user_id'] = $value;就会促发php的session机制,结果往对应的session文件中写入一个值。服务器端储存的session文件是不会删除的,只会过期。

    4.session.save_path下面有很多保存的session文件,php如何知道调用哪个session文件?

    在首次使用session_start()的时候会在客户端创建一个以PHPSESSID为名的cookie,例如session文件名为sess_d4heb14q4sp2rmq8m936m9ptv5,cookie的名字为PHPSESSID值为d4heb14q4sp2rmq8m936m9ptv5,这样php就知道调用哪个session文件了。

    如果在服务器端删除session文件,当客户端再次访问时还是会创建与删除session文件同名的session文件。因为,在客户端访问的时候会将本地储存在cookie中的PHPSESSID值传给服务器端,服务器端根据该值来创建session文件。

    但是客户端的cookie失效或者被删除后,再次访问时就会创建一个新的session文件,但服务器端就会有一个无效的session文件。所有的session文件不会被自动删掉,只是有个过期时间,以此决定:是新生成一个session文件还是使用原来的。

    其实,这些都是由session_start();来实现的。session_start()已经封装了发送cookie的操作。在调用session_start()的时候会往服务器端发送本地PHPSESSID的cookie,如果存在该cookie,如果服务器端有该session文件,直接向该文件写数据,如果没有该文件这创建与该cookie同名的session文件(这才出现来删除session文件还会创建同名的session文件)。如果本地没有储存的PHPSESSID的cookie,这在本地创建一个该cookie,并且在服务器端创建该session文件。(这个地方是哪个先创建,不知)

    cookie的名字PHPSESSID是可以改的,在php.ini中 session.name = PHPSESSID就是设置该cookie的名字。

    session与cookie唯一的关联就是就是存储session的ID号PHPSESSID。其他,不管你设置什么cookie,使用session的时候是不会用到这些值的。也无法获取到。比如同步登陆,即使设置了cookie,你的应用也必须依据session来判断,不能基于cookie判断,cookie是可以被修改的(事实上必须如此,因为session保存在服务器端)。

    5.用法

    Session 是用于保持状态的基于 Web服务器的方法。Session 允许通过将对象存储在 Web服务器的内存中在整个用户会话过程中保持任何对象。

    在Web上,Session的作用就是它在 Web服务器上保持用户的状态信息供在任何时间从任何页访问。因为浏览器不需要存储任何这种信息,所以任何浏览器都可以使用session来传值,保持用户的状态信息。

    但是,随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加。如果每个 Session 中保持许多对象,并且许多用户同时使用 Web应用程序(创建许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。

      

    6.PHP Session使用过程

    在应用session的时候,把session看成一个储存在服务器端的全局数组就可以来,如果你想存储一个$value值,只需要这样做$_SESSION['value'] = $value;就是一个$_SESSION的数组。

    在使用session赋值之前要先使用session_start();函数,来创建session文件

    在使用结束后,例如登出网站,要释放session或者销毁session。就要用session_unset();和session_destory();

    因此,释放用户的session所有资源,需要顺序执行如下代码:

    <?php
    session_start();
    session_unset(); 
    session_destroy();
    ?>

    也可以sesion_start();$a=array();$_SESSION=$a;(赋值一个空数组,即清空session)session_destroy();

    有时候要用到unset();释放session中的一个变量。例如unset($_SESSION['history_user']);
    session_unset()释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id,不需要传参数
    session_destroy()删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留,不需要传参数

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/js-html/p/3391134.html
Copyright © 2011-2022 走看看