会话控制(cookie、session)

一、cookie

  cookie是在http协议下,服务器或脚本可以维护客户端信息的一种方式;cookie是由服务器发送给客户端的片段信息,存储在客户端浏览器的cookie临时文件夹中,可手动删除也会因超出范围被浏览器自动删除,不宜存储私密信息;

  如何设置cookie?

    1.添加cookie

      setcookie("$name" ,"$value" ,$expire ,"$path" ,"$domain");

        $name:cookie的名称

        $value:该cookie的值

        $expire:该cookie的过期时间,过期后,该cookie文件会被自动删除;若未指定过期时间,默认为浏览器关闭时自动删除

        $path:有效路径,该cookie只在该路径下有效(可以访问);若设置为 "/" 则cookie将在整个域中可用;若设置为 "/dir/" 则cookie只能在/dir/目录及其子目录中使用;若不设置该值,则默认为当前文件所在路径

        $domain:有效域名,该cookie只在该域名下有效(可以访问),若未指定则为当前域名

      注意:setcookie(); 前不允许有任何输出

      例:

        setcookie('username','Autumn',time()+3600,'/');

    2.修改cookie

      重新 setcookie();

    3.查询cookie

      超全局数组:$_COOKIE

      $_COOKIE['cookie的名称']

    4.删除cookie

      改变setcookie()中的过期时间值$expire,使其过期并被自动删除

      例:

        setcookie('username','',time()-3600,'/');

二、session

  保存在服务器上的文件,文件当中保存着之前访问的信息

  session的查询是基于sessionid号的

  session的原理:

    当用户第一次来访问服务器的时候,把登录信息存储到服务器上的一个session文件中,并产生一个sessionid号,并且会向客户端浏览器发送产生cookie文件的请求,将sessionid号写入该文件中;用户第二次来访问服务器时候,携带sessionid号的cookie一起来访问服务器,服务器根据cookie中的sessionid号找到对应的session文件,从而获取到对应信息

  session的配置:

    PHP的配置文件php.ini中:session.save_path="D:/phpEnv/session" 修改session文件的保存路径(注意:session文件夹需先创建好

  session的操作:

    1.添加session

      session_start();

        在session的任意操作前,须先开启session_start()且前面不可有任何输出

      直接向$_SESSION数组中添加名称和值即可

        $_SESSION[$name]=$value;

      默认情况下添加session后会产生一个保存sessionid的cookie,但是此cookie的有效期为至关闭浏览器后失效;若要使该cookie在一定时间内有效(即关闭浏览器后重新打开仍有效)须对该cookie进行设置:

        session_name():获取该cookie的名称

        session_id():获取当前sessionid的值

        setcookie(session_name(),session_id(),time()+3600,'/');

    2.删除session

      ①直接将$_SESSION数组清空:

        $_SESSION=array();  或  $_SESSION=null;

      ②若要彻底清除session,需添加如下步骤:

        setcookie(session_name(),'',time()-3600,'/');  //删除该sessionid所在的cookie文件

        session_destroy();  //删除session文件

    3.修改session

      直接修改$_SESSION数组的元素值即可

    4.查询session

      直接查询$_SESSION数组即可

三、如果浏览器将cookie禁用,session是否还能使用?

  默认情况下,禁用cookie后,session将无法使用

  解决办法:

    可以在页面与页面间通过get传参将sessionid传递,传递的参数不需要用$_GET接收,session会自动接收:

      ①?session_name()=session_id()  (不推荐)

      ②使用常量SID来进行get传参

        ?SID  (推荐)

        若cookie被禁用,SID值为session_name()=session_id()

        若cookie未被禁用,SID值为空

    如果通过get参数传递sessionid没有生效,检查PHP配置文件php.ini中:

      session.use_only_cookies=1  改为  session.use_only_cookies=0

四、cookie和session的区别和联系

  区别:

    cookie是保存在客户端浏览器中的,session是保存在服务器中的;

    cookie在设置值的时候不能直接对$_COOKIE赋值,必须使用setcookie()进行设置;session可以直接对$_SESSION赋值,但必须先使用session_start()开启;

    cookie在删除时需要使用setcookie()使其过期而自动删除,session在删除时可直接清空$_SESSION数组;

    cookie在修改时需要重新使用setcookie()来重新设置值,session在修改时可直接对$_SESSION数组进行赋值修改;

    cookie在查询时查询$_COOKIE,session查询时查询$_SESSION;

  联系:

    session是将sessionid号保存在cookie中的,若cookie被禁用,默认情况下session将无法使用,只能通过get传参来代替;

    cookie通常情况下保存一些私密性较低的信息,session比cookie更加安全,但是session比cookie更加占用服务器资源;

猜你喜欢

转载自www.cnblogs.com/zhouwanqiu/p/9267033.html