现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论。

注:作者接触web开发和php两周左右,以下内容适合初学者。

1、导读

从文题目看,<简单PHP会话(Session)说明> 是已经圈定了本文的内容范围,试图阐明Session(文中对会话称为Session) 在PHP语言中是如何实现以及使用的,重点在于基本理解后的使用。
文章思路是首先搞清楚session是什么东西,Session有什么用,Session使用的套路是什么,PHP中是如何使用的。

2、会话(Session)说明

开始前,首先推荐一本基础理论书《HTTP权威指南》,是程序员基础必备知识,作者有电子版,有需要的可以留言。

a.    Session的由来

几乎每个人都上网,数以亿计的数据在网络中相互传输,数据之所以能够安全的传输,是基于HTTP协议的,很是耳熟能详是吧。其实HTTP协议所干的事情就是提供完成你的网络访问一系列方法,双方构建了一次访问,原则上就是一个会话建立了。说一个例子:小明在浏览器中输入https://www.baidu.com/(HTTPS是HTTP的加密版本,相比是增加了SSL加密层),这是小明对百度发起了一个请求,说:“我要看你的界面”,百度的服务器们收到信息,信息中包括了小名想干的事情,同时包括了小明的地址(否则百度不知道把内容给谁了),服务器核对信息OK,对小明这个请求进行备案,发送出小名想要的东西,一次完整的请求结束了。 这就是一次会话,会话的核心在于小明的信息备案(其实还涉及到TCP/IP的连接问题,这个与本文无关,忽略)。
其实与其说是构建了一个Session,倒不如说将一次访问概括为一个Session。

b.   Session能干什么用

从上面内容可以得到,每一个访问都是一个会话,服务器都要备案信息,这是有开销的,同时呢,也不大可能同一个人连续访问十次二十次就构建保存十次二十次,一个是增加开销,另一个是也比较蠢了。也就是说,一个人(确切说是同一个电脑和浏览器),在某个特定时间内,能够复用一个Session的,为什么在特定时间内呢?因为Session是有默认的过期时间,过期后服务器就清理掉了(如果不这样,你想想世界那么多人,来一个保留一个,太亏)。
ok,既然同一个人,多次访问都是一个Session(不要怀疑服务器无法判别是同一个人,具体可以看上面推介的书),而且每次访问的内容都是做备案的,那么也就是说,你Session周期内所有的行为服务器都是知道的,那么接下来重要的作用就来了,服务器通过对你的访问请求分析,能够获知到这个特定用户的行为偏好的,通过做一定的分析,能够推送一些用户喜欢关心的数据,广告定向也就是这么来的。 
当然可能还有其他的用户,性能等等之类的,个人不是特别理解机理,这里就这样。

3、PHP中Session的使用

通过上面的啰嗦,可以发现,Session这个概念其实是在服务器端发生的。PHP提供了一系列的配置、函数等,很好的实现Session功能。Session支持在 PHP 中是在并发访问时由一个方法来保存某些数据.从而使你能够构建更多的定制程序 从而提高你的 web 网站的吸引力. 一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的session id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 URL 进行传递.会话支持允许你将请求中的数据保存在超全局数组$_SESSION中. 当一个访问者访问你的网站,PHP 将自动检查(如果 session.auto_start 被设置为 1)或者在你要求下检查(明确通过session_start()或者隐式通过session_register()) 当前session id 是否是先前发送的请求创建. 如果是这种情况, 那么先前保存的环境将被重建. 

a. php中session基本用法

通过为每个独立用户分配唯一的Session ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。 一般来说,Session ID 通过 cookie 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。 如果请求中不包含会话 ID 信息,那么 PHP 就会创建一个新的Session,并为新创建的Session分配新的 ID。

Session的工作流程很简单。当开始一个Session时,PHP 会尝试从请求中查找Session ID (通常通过Session cookie), 如果请求中不包含Session ID 信息,PHP 就会创建一个新的Session。 Session开始之后,PHP 就会将Session中的数据设置到 $_SESSION变量中。 当 PHP 停止的时候,它会自动读取$_SESSION中的内容,并将其进行序列化, 然后发送给会话保存管理器器来进行保存。默认情况下,PHP 使用内置的文件Session保存管理器(files)来完成Session的保存。 也可以通过配置项session.save_handler(php.ini中配置项目)来修改所要采用的Session保存管理器。 对于文件Session保存管理器,Session会话数据保存到配置项session.save_path (php.ini中配置项目)所指定的位置。可以通过调用函数session_start来手动开始一个会话。 如果配置项session.auto_start 设置为1, 那么请求开始的时候,Session会自动开始。PHP 脚本执行完毕之后,session会自动关闭。 同时,也可以通过调用函数session_wirte_close() 来手动关闭会话。

b. php中session信息在php.ini中配置

这部分内容放在这里说是因为,不说明前面问题,鬼知道php.ini中的配置是什么东西。 上面提到的session.save_handler和session.save_path,这两个就是php.ini中的配置项目,这里面这块不细说,因为php手册实在是太详细了。本文默认模式是files。

c. php中的session机制

session_start()是session机制的开始,session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.相当于执行了下面COOKIE 操作。相反,如果存在session_id =$_COOKIE[session_name];然后去session.save_path指定的文件夹里去找名字为'SESS_'.session_id()的文件.读取文件的内容反序列化,然后放到$_SESSION中。
在会话结束的时候,会执行Session写入操作或是手工执行session_write_close()操作。
代码里面销毁Session一般有三个方法,    
1. setcookie(session_name(),session_id(),time() -8000000,..); //退出登录前执行
            2. usset($_SESSION); //这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
            3. session_destroy(); //删除$_SESSION 删除session文件以及session_id

附录,引用网络上的一段代码,作为结尾吧。

<span style="white-space:pre">    </span>//SESSION初始化的时候调用  function open($save_path, $session_name)  {  global $sess_save_path;  $sess_save_path=$save_path;  return(true);  }  //关闭的时候调用  function close()  {  return(true);  }  function read($id)  {  global $sess_save_path;  $sess_file="$sess_save_path/sess_$id";  return (string) @file_get_contents($sess_file);  }  //脚本执行结束之前,执行写入操作  function write($id,$sess_data)  {  global$sess_save_path;  $sess_file="$sess_save_path/sess_$id";  if ($fp= @fopen($sess_file,"w")) {  $return=fwrite($fp,$sess_data);  fclose($fp);  return$return;  } else {  return(false);  }  }  function destroy($id)  {  global $sess_save_path;  $sess_file="$sess_save_path/sess_$id";  return(@unlink($sess_file));  }  function gc($maxlifetime)  {  global$sess_save_path;  foreach (glob("$sess_save_path/sess_*") as$filename) {  if (filemtime($filename) +$maxlifetime<time()) {  @unlink($filename);  }  }  return true;  }  

转载于:https://www.cnblogs.com/wildfox/p/5791212.html

简单PHP会话(session)说明相关推荐

  1. PHP 会话(session 时间设定)使用入门

    PHP 会话(session 时间设定)使用入门 在PHP开发中对比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 Sess ...

  2. 浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  3. emqttd 0.9.0版本的会话(Session)、消息队列(MQueue)、飞行窗口(Inflight Window)设计

    emqttd 0.9.0版本重新设计了MQTT连接会话管理 每个MQTT客户端连接,不管是否持久的(Persistent),都启动一个连接会话进程. 该会话进程管理: 客户端的全部订阅(Subscri ...

  4. WebService大讲堂之Axis2(6):跨服务会话(Session)管理

    在<WebService大讲堂之Axis2(5):会话(Session)管理>一文中介绍了如何使用Axis2来管理同一个服务的会话,但对于一个复杂的系统,不可能只有一个WebService ...

  5. securecrt切换会话(session)的显示方式

    securecrt切换会话(session)的显示方式 Window(窗口)-> Tabs(选项卡)/Tile Vertically(垂直平铺)/Tile Horizontally(水平平铺)/ ...

  6. Cookie和会话Session

    Cookie和会话Session Cookie Cookie是识别客户端的特定用户. 1.每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端.实际上大多数的应用都是用 Cookie ...

  7. Redis简单案例(四) Session的管理

    Redis简单案例(四) Session的管理 原文:Redis简单案例(四) Session的管理 负载均衡,这应该是一个永恒的话题,也是一个十分重要的话题.毕竟当网站成长到一定程度,访问量自然也是 ...

  8. vim 保存会话(session)学习笔记

    @[TOC](vim 保存会话(session)学习笔记) 保存项目信息 保存和加载会话信息session 会话信息:当前编辑环境的空窗口.所有的缓冲区.当前目录.折叠(fold)相关的信息.帮助窗口 ...

  9. php会话(session)生命周期概念介绍及设置更改和回收

    http://www.169it.com/article/8429580816135935852.html https://my.oschina.net/jiec/blog/227252 sessio ...

  10. mysql中数据库database、实例instance、会话session的关系

    1. No suitable driver found for http://127.0.0.1:3306/test jdbc_url错误,jdbc走自己的协议. 正确的路径应该是:jdbc:mysq ...

最新文章

  1. Windons Server2008R2_向域中批量创建用户
  2. 在腾讯云上创建您的SQL Cluster(1)
  3. 近似线性依靠matlab_不要仅仅依靠单元测试
  4. adb命令检测apk启动时间、内存、CPU使用情况、流量、电池电量等——常用的adb命令...
  5. 深入浅出mybatis之入门使用
  6. 2015年第六届蓝桥杯国赛试题(JavaA组)
  7. Vue之安装Google开发插件
  8. 局域网共享文件的方法
  9. 老砒霜和小创创---小朋友,你这样就别怪叔叔坏心眼了
  10. ThingsBoard使用规则链将设备信息转发至外部mqtt
  11. Matlab自学笔记四:调用函数基本方法、传递参数、函数工作区、命令语法、调用匿名函数
  12. 激活ltsb2016_激活windows10 LTSB 2016
  13. xp远程linux打印,在Ubuntu下访问xp打印机
  14. 李笑来《韭菜的自我修养》笔记
  15. 利用WPT(Windows Performance Toolkit)进行程序的性能分析
  16. 【Shader】实验06——后处理实现色散效果
  17. Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource.
  18. 媲美GoogleEarth的ArcGISEarth安装教程(附下载地址)
  19. 简单振动测试系统软件,位标器振动测试系统设计.pdf
  20. 浏览器标准模式与怪异模式-CSS1Compat and BackCompat

热门文章

  1. 基于ssm框架的绩效管理系统
  2. Android 10.0强制所有app横屏显示
  3. 现有开发语言以及适用范围
  4. 操作系统小和尚挑水,老和尚喝水问题
  5. pytorch 权重weight 与 梯度grad 可视化
  6. matlab中如何使用help,MATLAB中如何使用help?怎样看matlab的help
  7. 三维激光扫描后处理软件_地面三维激光扫描仪应用之一|云尚智造
  8. AXI5 new feature: support atomic transaction
  9. Exception: ROM is missing for pong, see https://github.com/openai/atari-py#roms for instructions
  10. 【新手福音】分享一个自己制作的机器学习工具集合