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

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

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

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

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

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

(4) 解决之道:session

2,session技术

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

3,保存session信息

index1.php

<?php
session_start(); // 初始化session
$_SESSION['name'] = "zhangsan"; //保存某个session信息

index2.php

<?php
session_start();
echo $_SESSION['name'];

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

4,session可以保存多种数据类型

session不但保存字符串,还可以保存整型,布尔型,数组,对象等。

index1.php

<?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

<?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

<?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

<?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

<?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);类似。

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

  1. Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同

    Servlet会话机制: Http是一种无状态协议,它是无记忆的.也就是说,服务器不会保存用户的任何信息,当同一用户再次去访问时,服务器是不认识你的,它还是会建立新的连接. 但有时候我们需要服务器保留 ...

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

    登录网站后,在每个网页都能拿到用户信息 (1) 使用超链接传递用户名,这样太繁琐了,不建议使用 . (2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差. (3) ...

  3. 2.servlet的会话机制session

    session的说明: 1.session是服务端技术,存放在服务器 2.一个用户浏览器对应一个session域对象,一对一的对应关系 3.session的默认生命周期是30min,可以通过web.x ...

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

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  5. JavaWeb(二)会话管理之细说cookie与session

    前言 前面花了几篇博客介绍了Servlet,讲的非常的详细.这一篇给大家介绍一下cookie和session. 一.会话概述 1.1.什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接, ...

  6. Java Web(三) 会话机制,Cookie和Session详解(转载)

    https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...

  7. web开发(三) 会话机制,Cookie和Session详解

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6422391.html>,在此仅供学习参考之用. 一.会话 ...

  8. 会话机制,Cookie和Session详解

    转载自:https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二 ...

  9. java 浅谈web系统当中的cookie和session会话机制

    一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...

随机推荐

  1. linux下的xampp安装

    最近因为要部署一个php的公众号应用到一台linux的测试服务器,在考虑是用xampp这样的集成环境还是自己配置.故两个都安装配置下. 最后经过研究查阅相关资料后,总结: 因为xampp本身很开放,几 ...

  2. 还不好好读书吗?清华3D录取通知书出炉,还能动!

    近日,清华大学2018录取通知书“亮相”!看完后,网友直呼:哪里可以买到? 打开录取通知书 3D“二校门”跃然纸上 由清华师生共同打造.手工定制.独一无二的2018新版录取通知书来了!在新版录取通知书 ...

  3. JDK 泛型之 Type

    JDK 泛型之 Type 一.Type 接口 JDK 1.5 引入 Type,主要是为了泛型,没有泛型的之前,只有所谓的原始类型.此时,所有的原始类型都通过字节码文件类 Class 类进行抽象.Cla ...

  4. Zookeeper 系列(五)Curator API

    Zookeeper 系列(五)Curator API 一.Curator 使用 Curator 框架中使用链式编程风格,易读性更强,使用工程方法创建连接对象使用. (1) CuratorFramewo ...

  5. 专2-第一课 Ubuntu系统安装与配置

    1.1 使用VMware安装Ubuntu 1.1.1 准备工作 1)VMware的安装包 VMware至少要用10.0版本,本文采用最新的VMware12版本,这个版本对USB3.0的支持更加完善稳定 ...

  6. 负值之美:负margin在页面布局中的应用

    本文转载自:http://www.topcss.org/?p=94,有修改. 负数给人总是一种消极.否定.拒绝之感,不过有时利用负margin可以达到奇妙的效果,今天就表一表负值在页面布局中的应用.这 ...

  7. static 成员函数

    和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非st ...

  8. C和C++之间库的互相调用

    http://www.cppblog.com/wolf/articles/77828.html 昨晚有个朋友问我关于在C中调用C++库的问题,今天午饭后,由于脖子痛的厉害而没有加入到我们组的“每天一战 ...

  9. Fortran 数据类型

  10. UVa 11178 Morley's Theorem (几何问题)

    题意:给定三角形的三个点,让你求它每个角的三等分线所交的顶点. 析:根据自己的以前的数学知识,应该很容易想到思想,比如D点,就是应该求直线BD和CD的交点, 以前还得自己算,现在计算机帮你算,更方便, ...