zoukankan      html  css  js  c++  java
  • 会话控制(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更加占用服务器资源;

  • 相关阅读:
    【转自己的落谷博客】联通块的dfs
    STL中map的简单使用&常数优化
    转自自己的关于落谷计数器【p1239】的题解
    计算机网络三种模型
    docker的常用的一些配置
    容器整体性理解
    如何在类中定义装饰器?
    如何实现属性可修改的函数装饰器?
    如何定义带参数装饰器?
    如何为被装饰的函数保存元数据?
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9267033.html
Copyright © 2011-2022 走看看