• 20150116--Cookie+Session-02


    SESSION技术

    session技术是一种基于cookie技术实现的会话技术,cookie是将数据保存在浏览器,而session将数据保存到服务器。

    浏览器上的数据很容易暴露,或者被别人盗取,但是服务器认为相对浏览器,安全性要大幅提高。

    session原理

    clip_image002

    操作session

    操作步骤

    1. 开启session

    session_start:开启session

    clip_image004

    2. 将数据存放到session当中

    a) 先将数据保存到预定义超全局变量$_SESSION中

    clip_image006

    b) 脚本执行结束,系统会自动将$_SESSION中的数据存放到session文件中(因为session_start)

    clip_image008

    系统临时文件夹

    clip_image010

    修改session存储的临时目录

    clip_image012

    效果

    clip_image014

    3. 跨脚本共享数据:凡是需要使用$_SESSION的地方(使用session)必须先开启session

    clip_image016

    开启session共享数据

    clip_image018

    4. session不用了之后,要去清理掉服务器端的session文件

    session_destroy():这个是系统会自动的去清理掉当前会话对应的session文件,前提必须先开启session。

    clip_image020

    session文件处理原理

    session_start

    1. 能够从cookie中读取sessionid,PHPSESSID

    2. 如果读不到cookie,会自动的生成sessionid,并且将sessionid当做cookie保存到浏览器端

    3. 能够初始化$_SESSION变量

    4. 能够从sessionid对应的session文件去读取数据,将数据存放到$_SESSION中

    5. session_start读取文件的时候,如果当前文件不存在,会自动创建

    $_SESSION:保存数据

    在脚本执行结束的时候,如果没有session_destroy(),那么系统会自动将$_SESSION里的数据写到session文件中。

    session_destroy:组织系统将$_SESSION中的数据写入到文件,同时还能删除当前会话对应的sessionid所保存的文件。

    clip_image022

    session生命周期

    session声明周期分为两种

    sessionid的生命周期(cookie),默认的是浏览器关闭就失效,就会导致session文件不能访问

    clip_image024

    session文件本身的生命周期,session_start还会做一件额外的事情,就会尝试着去删除失效的session文件(gc:垃圾回收,概率性事件)

    clip_image026

    注意:大部分的网站说登录过期,是源于session文件过期,在session_start的时候会自动的删除这些过期的数据。

    session配置项

    自动开启session

    clip_image028

    session垃圾回收

    clip_image030

    session分层

    因为session文件过多的情况下,session文件的查找效率会降低。

    clip_image032

    系统不能自动创建文件夹

    clip_image034

    手动创建

    clip_image036

    注意:一共需要创建35个子文件夹

    一般情况下,如果一个网站的session文件比较多,而且读取比较频繁,会将session保存到内存(非关系型数据库),如果内存不是很足,就退而求其次,将session存放到关系型数据库。(session入库)

    $_SESSION操作

    $_SESSION不能存储索引数组

    clip_image038

    shop项目

    用户登录跨脚本共享登录信息

    1. 在用户登录之后,开启session,将用户的信息保存到$_SESSION中。/admin/privilege.php|act=check

    clip_image040

    2. 在需要使用session数据的脚本中,取出session信息,使用即可。/admin/index.php?act=top

    clip_image042

    3. 在对应的模板文件中去使用变量。/admin/templates/top.html

    clip_image044

    4. 将时间戳转换成时间。/admin/templates/top.html

    clip_image046

    登录成功更新用户信息

    1. 在登录成功之后,调用相应的方法去修改用户上次登录信息。/admin/privilege.php|act=check

    clip_image048

    2. 增加对应更新用户信息的方法。/admin/includes/User.class.php

    clip_image050

    3. 传入当前要更新用户的id。/admin/privilege.php?act=check

    clip_image052

    4. 给父类增加更新方法db_update。/includes/DB.class.php

    clip_image054

    验证用户是否登录

    1. 首页不能直接访问,必须要用户已经登录才能访问:如果有session文件,且文件中有user信息说明用户已经登录,否则没有登录。/admin/index.php

    clip_image056

    2. session_start在一个脚本中只能开启一次,去掉index.php中act=top中的session_start

    clip_image058

    退出系统

    退出系统,将session文件给删除。

    1. 给用户提供一个操作入口:点击事件,一个a标签中的url。/admin/templates/top.html

    clip_image060

    2. 处理用户动作请求:接收用户请求。采用$_REQUEST接收get和post提交的数据。/admin/privilege.php

    clip_image062

    3. 增加动作处理代码。/admin/privilege.php?act=logout

    clip_image064

  • 相关阅读:
    HDU 1728 逃离迷宫
    程序猿求职之道(《程序猿面试笔试宝典》)之不想签约,但也不想轻易放弃机会,怎么办?
    职场生涯(—)
    Python学习笔记24:Django搭建简单的博客站点(二)
    "高可用方案工具包" high availability toolkit 1.1
    [Swift]LeetCode421. 数组中两个数的最大异或值 | Maximum XOR of Two Numbers in an Array
    [Swift]LeetCode420. 强密码检验器 | Strong Password Checker
    [Swift]LeetCode419. 甲板上的战舰 | Battleships in a Board
    [Swift]LeetCode417. 太平洋大西洋水流问题 | Pacific Atlantic Water Flow
    [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露
  • 原文地址:https://www.cnblogs.com/lifushan/p/5419447.html
Copyright © 2020-2023  润新知