session与PHP之session_start()

官方手册:http://www.php.net/session_start

Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。

需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

session的工作原理

(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。

(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。

(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中, 这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

session存储在服务器端,默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。

如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。

当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取 SESSION 数据是php中的Session与Cookie

在PHP开发中对比起Cookie,session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 session 的使用。

由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。

对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢?因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全。

而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作

当然使用 session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的

用$_SESION之前必须要session_start()----其中之一的功能,$_SESSION是服务器端的cookie,相当一个大数组(浏览器关闭前,和session销毁前)$_SESSION中的数据可以一直用(除了重新赋值)。 $_SESSION 好比一个数组 $_SESSION[‘name‘] = ‘caocao‘ 这好比在数组中加了一个元素,相当于$_SESSION = array("name"=>"caocao") 使用的时候 还要使用$_SESSION[‘name‘] 才能得到‘caocao‘。

session_start();

告诉服务器使用session。一般来说,php是不会主动使用session的。

不过可以设置php.ini中的session.auto_start=1来自动对每个请求使用。

而用了session_start(),或者自动开启session,

服务器会根据请求头部传来的cookie中或url中的PHPSESSID来确认此sessionid对应的$_SESSION数组。

thinkphp中不用进行session_start(),因为thinkPHP对其有进行封装,待仔细验证。

时间: 2024-08-05 10:52:53

session与PHP之session_start()的相关文章

Session 知识点再整理(一)基本概念和原理

Session 的概念 Session 和 Cookie 一样,也是针对 HTTP 的局限性而提出的一种保持客户端和服务器端会话连接状态的机制. Session 被称为会话,指用户在进入网站到浏览器关闭(或退出网站)这段时间内与 Web 系统的会话过程. Session 的存储  Session 保存在服务器端,默认情况以文件的形式保存在服务器硬盘上,每个 Session 一个文件,文件名如:sess_j64kv3np0ft2u00aun0cilqdo2,里面保存的内容结构是:变量名 | 类型:

php之session熟悉了解

概念了解: session在web主要指用户在浏览某个网站,从进入该网站到关闭这个网站经过的这段时间. 工作原理: 1.启动seesion,服务端会传给浏览器一个键值为PHPSESSID的唯一标识存储在本地的cookie中,同时会在服务器相应目录下根据键值生成一个对应的session文件 设置session值后,值就存在该session文件中 2.服务器php脚本读取session值的话,浏览器传回键值的唯一标识,通过启动session,然后根据键值可以从session文件中加载已经存储的变量

Cookie & Session【会话管理与控制】

用现实生活 类比Cookie 和 Session : 两个关于开会的故事: 在几十年前人们开会的时候,都需要带上一个参会证.这个参会证上有这个人的职务.姓名.单位.照片等信息.在开会的时候,会议安保人员.组织者只需要检查相关信息就行了.(个人信息,由自己携带) 几十年后,越来越先进了.你参会前,会给你发一个卡片或者工牌.这个卡片上有一个唯一的号码.拿到号码,再用摄像头扫一扫即可完成你的个人信息核对.(个人信息,由会议主办方的数据库保存) 在电脑里面也有这两种验证方式: 人们在参会证上写着所有的相

解决session共享的几种思路

session与cookie的区别在于:session是保存在服务器端,cookie保存在客户端.session怎么样保存的?以文件的形式保存. 第一种办法:把原来存储在服务器磁盘上的session数据存储到客户端的cookie中去.php由原来的"从本地(也就是服务器)磁盘上读取session数据"转变为"浏览器的cookie中读取数据",一般是把session数据按照自己定义的加密规则,加密后后存在cookie中.数据保存在cookie中这种做法有好处,也有坏处

session 与 cookie的区别用法

//设置cookie方法 setcookie("name",'zhangsan'); setcookie("name",'zhangsan',time()+60);//设置cookie有效时间为60秒 //setcookie("visittime",date("y-m-d H:i:s"),time()+60);//设置保存cookie失效时间的变量 //读取cokie方法 $name=$_COOKIE["name&q

laravel session的使用

用Laravel开发应用,把原有的代码copy过来,以前的代码session使用了$_SESSION,本以为移植过来可以很好的运行的,因为没有依赖其他的组件,结果出现了这个 Undefined variable: _SESSION Laravel的session的配置文件配置在 app/config/session.php 中,使用时可以看看 session 配置文件中可用的选项设定及注释. Laravel 默认使用 file 的方式来实现 session的.她并不用php原生的$_SESSIO

深刻认识一下session

session是什么: session即会话,是一种持续性,双向的连接. session和cookie在本质上没什么区别,都是针对http协议的局限性提出的一种保持客户端和服务端会话状态的机制. session的实现 1.cookie : 通过在cookie中存储sessionID 2.url重写:index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381 (通过session.use_cookies来控制使用哪一种方式) session的工作原理:

PHPSession-完全PHP5之session篇

完全PHP5之session篇 转自http://blog.csdn.net/masterft/article/details/1640122 1.什么是session?       Session的中文译名叫做"会话",其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.目前社会上对session的理解非常混乱:有时候我们可以看到这样的话"在一个浏览器会话期间,...",这里的会话是指从一

session和cookie的用法以及区别

------------------------------------------session的使用-------------------------------------- session中同一浏览器同一站点只能有一个session_id,下面我们一起来看看关于session使用方法.如何使用session,凡是与session有关的,之前必须调用函数session_start();为session赋值很简单,如: <?php Session_start(); $Name = "这