session 与cookie

概念:session 与 cookie 本质上都是文件(session文件和cookie文件),只不过这类文件的读取一般是由系统自动完成的,这种机制称之为session机制和cookie机制,也有人统称为会话机制。
产生原因:创建这种机制是因为http协议是无状态协议,无法知道用户的登录状态,每次刷新或访问都和第一次访问是一样的,这样用户每次都要重新登录,都要重新加购物车等等,用户体验差,也增加服务器负担。所以就将用户登录的信息保存到文件(session,cookie)中,用户访问不同的页面时,通过查看文件信息,来获取用户登录的信息,从而达到能识别用户是否登录是否有其他操作的效果。
什么是会话:从用户角度就是从用户登录网站,到用户退出登录这个过程。从程序员角度就是对 S E S S I O N 数 组 的 创 建 , 写 入 , 读 取 , 修 改 , 删 除 , 销 毁 的 一 个 过 程 。 s e s s i o n 文 件 与 c o o k i e 文 件 在 会 话 中 的 作 用 : s e s s i o n 文 件 是 _SESSION数组的创建,写入,读取,修改,删除,销毁的一个过程。 session文件与cookie文件在会话中的作用:session文件是 SESSIONsessioncookiesession_SESSION数组读取和写入的文件。而cookie文件是帮助服务器找到对应session文件的“钥匙”,实质上cookie文件中起作用的内容就是session_id,它是一串唯一的只有服务器能识别的字符串,通过它能找到服务器中的session文件(该文件就是以session_id为名),还可以知道请求的IP地址,从而正确地响应客户端的请求,不会将内容发到其他的客户端。会话需要session和cookie文件,没有会话这2个文件就不会产生。
会话的过程:cookie文件保存在客户端(浏览器),session文件保存在服务器端(临时文件夹)。
1,开启会话
生成session文件 服务器接收到来自浏览器的请求(浏览器会先搜索本地cookie,如果cookie作用域在访问的域名内,会将这个cookie文件通过请求也发送到服务器),解析请求的文件资源,遇到session_start()函数,开启会话,此时有一定几率触发gc(垃圾回收机制,清理过期的session文件)。 检查情求是否有cookie,有cookie文件,则根据cookie中的session_id找到对应的session文件,并将它载入,以供 S E S S I O N 访 问 。 没 有 c o o k i e 或 找 不 到 s e s s i o n 文 件 , 就 根 据 请 求 的 I P 创 建 一 个 s e s s i o n 文 件 , 文 件 名 为 s e s s i o n i d , 并 将 这 个 s e s s i o n i d 发 送 到 客 户 端 保 存 在 c o o k i e 中 ( 这 个 c o o k i e 文 件 名 是 会 话 名 , 由 s e s s i o n . n a m e = " 会 话 名 " 决 定 ) , 还 要 使 _SESSION访问。没有cookie或找不到session文件,就根据请求的IP创建一个session文件,文件名为session_id,并将这个session_id发送到客户端保存在cookie中(这个cookie文件名是会话名,由session.name="会话名"决定),还要使 SESSION访cookiesessionIPsessionsessionidsessionidcookiecookiesession.name=""使_SESSION数组能够访问到这个文件。
2,注册会话
创建 S E S S I O N 数 组 , 给 它 赋 值 用 它 来 保 存 用 户 信 息 , 跨 页 面 时 这 个 信 息 能 共 享 。 如 用 户 登 录 时 表 单 提 交 的 用 户 名 , 密 码 等 信 息 保 存 到 _SESSION数组,给它赋值 用它来保存用户信息,跨页面时这个信息能共享。如用户登录时表单提交的用户名,密码等信息保存到 SESSION_SESSION数组中,以便访问其他页面时使用会话,用户不用再输入密码等信息。
3,使用会话
当页面跳转时,上一个页面的 S E S S I O N 数 组 消 失 , 但 服 务 器 将 它 的 内 容 自 动 保 存 到 了 对 应 的 s e s s i o n 文 件 中 , 服 务 器 内 存 中 还 保 存 着 注 册 会 话 时 的 s e s s i o n i d ( 也 称 为 会 话 i d ) , 根 据 这 个 会 话 i d 找 到 对 应 的 s e s s i o n 文 件 , 读 取 s e s s i o n 文 件 中 的 值 , 并 保 存 到 这 个 页 面 的 _SESSION数组消失,但服务器将它的内容自动保存到了对应的session文件中,服务器内存中还保存着注册会话时的session_id(也称为会话id),根据这个会话id找到对应的session文件,读取session文件中的值,并保存到这个页面的 SESSIONsessionsessionidididsessionsession_SESSION数组中,通过 S E S S I O N 中 的 值 就 能 判 断 用 户 的 登 录 状 态 。 4 , 结 束 会 话 实 质 上 是 对 本 次 会 话 过 程 中 s e s s i o n 文 件 的 某 个 , 或 多 个 数 据 的 删 除 ( 结 束 单 个 或 多 个 会 话 ) 。 但 s e s s i o n 文 件 不 能 直 接 在 脚 本 中 删 除 , 要 通 过 系 统 的 s e s s i o n 机 制 来 实 现 , 即 通 过 修 改 _SESSION中的值就能判断用户的登录状态。 4,结束会话 实质上是对本次会话过程中session文件的某个,或多个数据的删除(结束单个或多个会话)。但session文件不能直接在脚本中删除,要通过系统的session机制来实现,即通过修改 SESSION4sessionsessionsession_SESSION数组来实现对session文件的修改。
a.删除单个或多个会话: S E S S I O N [ ′ X X ′ ] = ′ ′ ; _SESSION['XX'] = ''; SESSION[XX]=;_SESSION = array();(不会删除session文件)
b.直接删除session文件:session_destroy();(不能删除与$_SESSION 关联的变量)。
在脚本结束后系统才会执行对session文件的操作。
完整的结束会话:1,清除session变量 2,清除session_id,session文件。
这样就算COOKIE被劫持也无法登陆,每次登陆后退出时点一下退出能提高上网的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值