PHP会话机制---session的基本使用
登录网站后,在每个网页都能拿到用户信息
(1) 使用超链接传递用户名,这样太繁琐了,不建议使用 。
(2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差。
(3) 使用cookie,登录成功后,服务器将用户信息存储到客户端的cookie。这样存在缺点:
① 安全性差,将用户信息存储在本地,很容易被别人找到。
② 服务器每次打开一个网页,都通过网络从客户机读取用户信息,这样浪费带宽,当用户很多,每个用户打开很多网页,会浪费巨大的带宽。
(4) 解决之道:session
2,session技术
Session是服务器端技术,利用这个技术,服务器可以为每个用户的浏览器创建一个为其独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。
3,保存session信息
1、什么是session?
Session的中文译名叫做“会话”,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
2、Session常见函数及用法?
● Session_start():开始一个会话或者返回已经存在的会话。
说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出.
警告:有些类型的数据不能被序列化因此也就不能保存在会话中。包括 resource变量或者有循环引用的对象(即某对象将一个指向自己的引用传递给另一个对象)。
●注册SESSION变量:
PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。
index1.php
|
1
2
3
|
<?phpsession_start(); // 初始化session$_SESSION['name'] = "zhangsan"; //保存某个session信息 |
index2.php
|
1
2
3
|
<?phpsession_start();echo $_SESSION['name']; |
先在网页中运行index1.php,再运行index2.php页面输出:

● session_id
session_id() 用于设定或取得当前session_id。php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。
如果session_id()有具体指定值的话,将取代当前的session_id值。
session_id()如果没有指定值,则返回当前session_id();当前会话没有启动的话,则返回空字符串。
● 检查session是否存在
在以往的php版本中通常使用session_is_register()检查session是否存在,如果您使用$_SESSION[‘XXX’]=XXX来注册会话变量,则session_is_register()函数不再起作用。你可以使用
isset($_SESSION[‘xxx’])来替代。
● 更改session_id
session_regenerate_id() 更改成功则返回true,失败则返回false。
使用该函数可以为当前session更改session_id,但不改变当前session的其他信息。例如:
● session_name()
返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id.
session改名示例:
<?php
$previous_name = session_name("WebsiteID");
echo "新的session名为: $previous_name<br />";
?>
● 如何删除session?
1、unset ($_SESSION['xxx'])删除单个session,unset($_SESSION['xxx'])用来unregister一个已注册的session变量。其作用和session_unregister()相同。
2、$_SESSION=array()删除多个session
3、session_destroy()结束当前的会话,并清空会话中的所有资源。。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
下面是PHP官方关于删除session的案例:
<?php
// 初始化session.
session_start();
/*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
$_SESSION = array();
/***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 最后彻底销毁session.
session_destroy();
?>
由此我们可以得出删除Session的步骤:
①session_start()
②$_SESSION=array()/unset($_SESSION['xxx'])
③session_destroy()
3,session可以保存多种数据类型
session不但保存字符串,还可以保存整型,布尔型,数组,对象等。
index1.php
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?phpsession_start(); // 初始化session$_SESSION['name'] = "zhangsan"; //保存某个session信息$_SESSION['age'] = 100;$_SESSION['isBoy'] = true;$arr1 = array("北京","小明","hello");$_SESSION['arr1'] = $arr1;class Dog{ private $name; private $age; private $intro; function __construct($name,$age,$intro){ $this->name = $name; $this->age = $age; $this->intro = $intro; }}$dog1 = new Dog("大黄",2,"很听话");$_SESSION['dog1'] = $dog1; |
index2.php
|
1
2
3
4
5
6
7
|
<?phpsession_start();foreach($_SESSION as $key=>$value){ echo $key.":"; var_dump($value); echo "<br/>";} |
先在网页中运行index1.php,再运行index2.php页面输出:

5,获取session信息
(1)直接获取所有session

(2)根据key获取
a)直接获取某个变量

b)获取数组

c)获取对象,session在保存对象时候,没法保存类的信息,因此在获取对象,需要先声明这个类。可以把类单独作为一个文件,存储和读取session时候分别引用这个文件。

Session的更新,就是根据key值重新保存session的值。
Session的删除
(1) 指定删除session中某个键值对

(2) 删除所有session

Session数据默认存在时间是1440s(24分钟),可以在php.ini中修改, session.gc_maxlifetime = 1440。Session文件的存放路径是可以修改的,可以通过修改php.ini改变sesion文件存放路径,session.save_path = "tcp://127.0.0.1:11211"。
Session使用前,先进行初始化,session_start();这样比较麻烦,可以在php.ini设置session自动初始化,session.auto_start = 0(此方法不推荐)。
浏览器访问页面a.php时候,服务器产生一个session文件,将其存放在服务器,同时将session_id发送给浏览器,浏览器将其保存到cookie,浏览器再次访问b.php时候,从cookie中获取session_id发送到服务器,服务器根据session_id获取相应session内容。
问题:如果浏览器禁用cookie,怎么使用session呢?
使用URL重写的方式,url重写分为手动和自动。自动重写url就是配置php.ini,开启透明的SID,其他程序不变,自动重写url不安全,不建议使用。
开启透明SID,需要修改的php.ini是:
session.use_trans_sid = 1 //由0改为1
session.use_only_cookies = 0 //是否只使用cookie来保存session值 该参数为1时,上述机制失效。
session.use_cookies = 0 //设置客户端是否使用cookie来保存session值 该参数的值不影响上述机制的进行。这个可改可不改
手动模式:
index1.php
|
1
2
3
4
5
6
|
<?phpsession_start();$_SESSION['name'] = "zhangsan";$_SESSION['age'] = 100;echo 'session save succes! click <a href="index2.php?'.SID.'">here</a> to see SID<br/>'; |
index2.php
|
1
2
3
4
5
6
7
|
<?phpif($_GET["PHPSESSID"]){ session_id($_GET["PHPSESSID"]);}session_start();echo session_id().'<br/>';echo $_SESSION['name']; |
而自动模式,会将url后面自动添加PHPSESSID参数,所以在index1.php中去掉SID即可,index2.php不变。
index1.php
|
1
2
3
4
5
6
|
<?phpsession_start();$_SESSION['name'] = "zhangsan";$_SESSION['age'] = 100;echo 'session save succes! click <a href="index2.php">here</a> to see SID<br/>'; |
参考地址:
https://blog.csdn.net/zhengxijia2012/article/details/73437376
https://www.runoob.com/php/php-sessions.html
https://www.cnblogs.com/usa007lhy/p/5913466.html
PHP会话机制---session的基本使用的更多相关文章
- Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同
Servlet会话机制: Http是一种无状态协议,它是无记忆的.也就是说,服务器不会保存用户的任何信息,当同一用户再次去访问时,服务器是不认识你的,它还是会建立新的连接. 但有时候我们需要服务器保留 ...
- 二,PHP会话机制---session的基本使用
1,思考:登录网站后,在每个网页都能拿到用户信息 (1) 使用超链接传递用户名,这样太繁琐了,不建议使用 . (2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差 ...
- 2.servlet的会话机制session
session的说明: 1.session是服务端技术,存放在服务器 2.一个用户浏览器对应一个session域对象,一对一的对应关系 3.session的默认生命周期是30min,可以通过web.x ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- java 浅谈web系统当中的cookie和session会话机制
一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...
- web开发(三) 会话机制,Cookie和Session详解
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6422391.html>,在此仅供学习参考之用. 一.会话 ...
- 会话机制,Cookie和Session详解
转载自:https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二 ...
- session 会话机制以及变量覆盖
session会话机制介绍如下 http是无状态协议.服务器靠cookie和session来记住用户.$_SESSION 和 $_GET等一样,是超全局变量. 后台脚本里面会写: session() ...
随机推荐
- [3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)
如果已经看过本章节:目录传送门:这是目录鸭~ 上节内容写了Actor管理器,那么这一节让我们先创建一个角色.(此章节开始加速...) 1.制作角色展示AssetBundle: 提取农药某个展示模型(S ...
- Spark学习之RDDs介绍
什么是RDDS? RDDS即Resilient distributed datasets(弹性分布式数据集). Spark中,所有计算都是通过RDDs的创建,转换,操作完成的. 一个RDD是一个不可改 ...
- [Linux] Linux下undefined reference to ‘pthread_create’问题解决
问题的原因:pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败. 解决:在gcc编译的时候,附加要加 -lpthread参数即可解决.
- python2.7过渡到python3.6时遇到的差异总结
1.Python3中print为一个函数,必须用括号括起来而Python2中print为class print('hello') 2.python3将raw_input和input进行了整合,只有in ...
- jsp 中include使用问题
如果在需要在jsp页面做页面包含时 会使用到include 指令 来进行页面包含操作 这里是页面的头部 文件名称是head.jsp <%@ page language="java&qu ...
- mybatis 插件的原理-责任链和动态代理的体现
目录 1 拦截哪些方法 2 如何代理 3 代理对象 4 责任链设计模式 @ 如果没有自定义过拦截器, 可以看我前面的文章.如果不知道 JDK 动态代理怎么使用的, 可以看我这文章. 责任链设计模式理解 ...
- CDH集群的配置优化须知
通过改善IFile阅读器的性能 IFile Reader,进而可改善随机处理程序并减少储备空间,达到MapReduce的配置最佳实践要求.而MapReduce shuffle的处理程序和 ...
- 【SQL server初级】SQL SERVER Transactional Replication中添加新表如何不初始化整个快照
在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的.但是在已有的复制(发布订阅) ...
- 【SQL server基础】object_id()函数
在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obj ...
- asp.netcore 自动挡Docker Nginx Redis(滴滴滴,自动挡)
前言 上一章介绍了Docker通过多条命令创建启动运行Docker容器,由此可见这样一个个去创建单独的容器也是相当麻烦的,比如要在某个复杂项目中用DB.缓存.消息等等,这样我们还要去一个个再创建,为此 ...