PHP会话机制---session的基本使用

PHP会话机制---session的基本使用

1,思考:登录网站后,在每个网页都能拿到用户信息

(1) 使用超链接传递用户名,这样太繁琐了,不建议使用 。

(2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差。

(3) 使用cookie,登录成功后,服务器将用户信息存储到客户端的cookie。这样存在缺点:

① 安全性差,将用户信息存储在本地,很容易被别人找到。

② 服务器每次打开一个网页,都通过网络从客户机读取用户信息,这样浪费带宽,当用户很多,每个用户打开很多网页,会浪费巨大的带宽。

(4) 解决之道:session

2,session技术

Session是服务器端技术,利用这个技术,服务器可以为每个用户的浏览器创建一个为其独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。

3,保存session信息

index1.php


1

2

3

<?php

session_start(); // 初始化session

$_SESSION[‘name‘] = "zhangsan"//保存某个session信息

index2.php


1

2

3

<?php

session_start();

echo $_SESSION[‘name‘];

  先在网页中运行index1.php,再运行index2.php页面输出:

4,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

<?php

session_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

<?php

session_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时候分别引用这个文件。

6,Session的更新,就是根据key值重新保存session的值。

7,  Session的删除

(1) 指定删除session中某个键值对

(2) 删除所有session

8,Session数据默认存在时间是1440s(24分钟),可以在php.ini中修改, session.gc_maxlifetime = 1440。Session文件的存放路径是可以修改的,可以通过修改php.ini改变sesion文件存放路径,session.save_path = "tcp://127.0.0.1:11211"。

9,Session使用前,先进行初始化,session_start();这样比较麻烦,可以在php.ini设置session自动初始化,session.auto_start = 0(此方法不推荐)。

10,浏览器访问页面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

<?php

session_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

<?php

if($_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

<?php

session_start();

$_SESSION[‘name‘] = "zhangsan";

$_SESSION[‘age‘] = 100;

echo  ‘session save succes! click <a href="index2.php">here</a> to see SID<br/>‘;

11,php.ini中关于session和cookie的配置

(1) session.use_trans_sid = 0,开启后,默认为每个url后添加了session_name=session_id。

(2) session.save_path=”c:/mysession”,save_path是session文件在服务器的存放路径。

(3) session.gc_maxlifetime = 1440,session默认最大生命周期,当session文件在1440s后没被访问的话,则该session被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用时候被清理掉;session.gc_probability=1;session.gc_divisor=1000;这两个参数根据网站规模合理设置。每当初始化一个session时候,有gc_probability/gc_divisor的概率执行一次垃圾回收。

我开启三个会话,则创建三个对应的session文件,当每个文件在30秒内都没被调用的话,就会被当成是“垃圾文件”,等到gc进程调用的时候,“垃圾文件”就会被unlink,因为之前我已经通过修改php.ini配置文件,将gc被调用的概率改成百分百,所以接下来,如果我重新使用任何一个浏览器刷新下页面的时候,三个session文件,应该只剩下一个了。

(4) session.cookie_lifetime,以秒数指定了发送到浏览器的cookie的生命周期,值为0表示“直到关闭浏览器”。默认为0。这个与程序中setCookie(“name”,”zhangsan”,time()+60);类似。

时间: 2024-07-29 11:31:20

PHP会话机制---session的基本使用的相关文章

2.servlet的会话机制session

session的说明: 1.session是服务端技术,存放在服务器 2.一个用户浏览器对应一个session域对象,一对一的对应关系 3.session的默认生命周期是30min,可以通过web.xml修改 4.session中可以存放多个属性 5.session可以存放对象 6.如果同一个浏览器,session.setAttribute("name",val)设置属性的时候,如果名字相同,会替换该对象的值 7.为什么浏览器能够为不同的浏览器提供不同的session 创建sessio

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

Java Web(三) 会话机制,Cookie和Session详解

一.会话机制 Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择.具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所

HTML5项目笔记7:使用HTML5 WebStorage API构建与.NET对应的会话机制

HTML5的Web Storage API,我们也称为DOMStarage API,用于在Web请求之间持久化数据.在Web Starage API 出现之前,我们都是将客户端和服务端之间的交互数据存储在远程服务器上,随着Web Starage API的出现,我们可以在客户端存储我们重复访问的交互数据,用户在打开浏览器的时候,可以快速地读取到数据,减少了用户等待,数据流量. 在Web Starage 出现之前,我们在客户端存储数据一般使用Cookie,用于客户端和服务端之间保存会话标识符,同时可

android 客户端与服务器 保持同一会话的session

最近在开发项目的过程中,遇到android与web服务器要在同一session下通信的问题. 在解决问题前先回顾下Session与Cookie: Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实现,也可以用URL回写的机制来实现. Cookie和Session有以下明显的不同点: 1)Cookie将状态保存在客户端,Session将状态保存在服务器端: 2)Cookies是服务器

会话跟踪session cookie

会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 理论是,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆.而Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.

PHP会话控制SESSION与COOKIE介绍

会话控制产生的背景介绍 实现用户跟踪的几个方法: 1.当前页面的变量 page 在当前页面可用,在页面执行完成之后,变量释放了. 2.两个页面之间传递变量 get 通过URL进行传值/abc.php?id=12234&age=2 能够做用户跟踪但是太繁琐. 3.会话级别 session 同一个用户在同一个网站共享自己的变量. 4.全局的 glboal 文件.数据库.任何人.任何网站我都能够使用它们.总之,会话控制其实就是许服务器跟踪同一个客户端做出的连续的请求. SESSION和COOKIE的区

web容器的会话机制

基本所有web应用开发的朋友都很熟悉session会话这个概念,在某个特定时间内,我们说可以在一个会话中存储某些状态,需要的时候又可以把状态取出来,这整个过程的时间空间可以抽象成"会话"这个概念.尽管你对session的使用已经很熟悉了,但你未必真正理解session是什么.因为你只是使用了request.getsession().setAttribute("users", username)把某个值设置到会话中的users变量里面,只是使用了String user

php中关于会话机制的理解

web服务器端与客户端浏览器进行通信时,是基于http协议的.但是http协议是无状态协议,所谓无状态是说本次的http请求与下一次请求是单独的请求,每次请求保存的信息都不会保存.因此会话机制就应运而生,这种机制就是解决这种问题.通过会话机制可以保留通信信息,比如用户的信息保存,因此也实现了用户在使用应用过程中的跟踪,状态的维护. cookie:     cookie机制,是可以将访问产生的一段信息保存在客户端浏览器,进行下一次访问的时候,会将该信息带入请求头信息中,将信息     传递到服务器