美文网首页
session和cookie

session和cookie

作者: 全栈coder | 来源:发表于2016-09-22 01:10 被阅读55次

    session和cookie都是会话控制思想的体现,即:允许服务器跟踪同一客户端的连续请求。


    cookie是什么?

    将使用者的资料记录存放在客户端的技术

    cookie运行原理?

    首先:服务器 通过http的响应头 把用户的信息 以键值对的形式发送到客户端

    然后:当客户端再次访问同一台服务器其他的脚本时,会自动携带cookie中的信息通过http请求头传送给服务器

    最后:服务器接收到信息,重新对登陆者身份进行验证

    cookie包含了什么?

    cookie包括名字,值,域,路径,过期时间。

    路径和域构成cookie的作用范围。cookie如果不设置过期时间,则这个cookie在浏览器进程 存在时有效,关闭时销毁。如果设置了过期时间,则cookie存储在本地硬盘上,在各浏览器进程间可以共享。

    怎么设置cookie?

    使用php内建的setcookie()函数

    setcookie($name,$value,$path,$domain,$source)一共六个参数,一般常用前三个 名字,值和生存时间。最后一个source指的是是否仅在安全的https连接时传送,默认false

    例:setcookie(‘name’,‘tian’,time()+60*60*24*7,'/test','.baidu.com',‘1’)设置cookie名为name,值为tian,这个cookie七天后失效,只在服务器test目录下生效,只在baidu.com的所有子域中生效,仅在安全的连接中才能被设置

    注意:setcookie的第二个参数只能是字符串或者数值

    怎么删除cookie?

    第一种方法:setcookie('name')  省略了别的参数

    第二种方法:setcookie(‘name’,'',time()-1)  把生存时间设为过期

    cookie放哪了?

    如果用户是windows系统,那么放在了C:\Docunments and Settings\用户名\Cookies

    cookie的形态?

    cookie可以是单一的,通过setcookie('name','tian') 现在cookie的标识符为name

    cookie也可以为数组,通过setcookie('user[username]','tian') 现在cookie的标识符为user[username],这是一个数组的下标


    seesion是什么?

    将使用者的资料记录存放在服务器端的技术

    session是保存使用者的资料在服务器系统下,而cookie是将数据放在客户端的计算机之中对于session来说,客户端仅仅保存服务器为用户创建的一个session标识符称为sessionID而在服务器端保存session变量的值。sessionID是一个32位的字符串,一般情况下sessionID保存在客户端的cookie里。如果禁用cookie,sessionID可以通过隐藏表单传递,也可以通过URL重写,就是把后缀到url传递

    session运行原理?

    首先:第一次访问网站,session_start()函数创建一个sessionID,通过HTTP响应头发送到客户端并保存在cookie中,同时也在服务器端创建一个以sessionID命名的文件,保存用户的会话信息

    然后:用户再次访问网站时,先检查HTTP请求头中是否有一个sessionID,没有就创建同上一步,有的话就在服务器硬盘中搜索与seesionID同名的文件,将会话信息读出。

    session的使用

    在php中必须先调用session_start()函数,开启session。函数没有参数,如果是基于cookie的session,使用该函数之前,不能有任何内容的输出。

    启动完成后,接下来就是注册和读取session变量,都要用过全局数组$_SESSION数组完成session_start();然后注册session变量$_SESSION['username'] = "tian";

    注意:在$_SESSION['username'] = "tian"赋值的同时也会在sessionID文件中追加信息;当用户再次请求本页或其他页面,或者 echo $_SESSION['username'] ,是先从这个用户的seesionID文件中获取全部的信息数据进入到$_SESSION数组中,感觉起来好像是直接从数组中获取得值。

    注销变量与销毁Session

    1.session_destroy()结束当前的会话,清空会话中所有资源,但不会释放session相关变量

    2.  unset($_SESSION['username']);             //删除session中注册的用户名变量 unset($_SESSION['password']);                     //删除删除session中注册的密码变量或者直接$_SESSION = array()    将这个全局数组赋为空

    3.setcookie(session_name(),'',time()-3600,'/');    //删除客户端的cookie,这个第一个参数session_name是php.ini里设置的sessionID的cookie标识符

    Session的自动回收机制

    虽然用户可以点击“退出”按钮退出登录,但如果直接关闭浏览器或者断电的情况下载服务器端保存的Session文件是不会被删除的,虽然下次登录会重新分配一个sessionID,但是之前的Session文件已经成为了垃圾文件。

    在php.ini中使用session.gc_maxlifetime选项指定一个时间,例如1440也就是24分钟后没有更新修改时间的session文件就会被‘垃圾回收程序’收回。

    垃圾回收程序是在session_start()函数调用时启动的,如果用户很多,可能一秒内session_start()函数会调用N次,每次都要垃圾回收的话是不合理的。

    可以在php.ini中修改session.gc_probability/session.gc_divisor公式计算概率例如1/100,前者设为1,后者设为100。

    自定义Session处理方式

    session默认在web服务器中存储会话信息,但是如果用户量特别大的情况下,文件I/0开销会很大,严重影响效率,最主要的是不能跨服务器, 对于大系统一般都会使用多台服务器进行并发处理,这样就不能达到跟踪用户的目的。 ——需要我们改变session存储方式:

    1.使用NFS或者SAMBA共享技术保存在其他服务器中。 2.使用数据库保存session信息。    3.(最优)使用memcache缓存技术存储。

    不论使用哪种方式原理都是一样的,使用php中的session_set_save_handler()函数处理:该函数六个必选参数,分别代表了session声明周期的六个过程

    相关文章

      网友评论

          本文标题:session和cookie

          本文链接:https://www.haomeiwen.com/subject/vokqettx.html