1.启动会话

session_start()

通过session_register()函数创建会话

session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求php.ini文件的选项,将register_globals指令设置on,

然后重新启动Apache服务器。

注意:调用session_register()时,不需要调用session_start()函数,PHP会在注册变量后隐含的调用session_start()函数。

2.注册会话

会话启动后,全部保存在$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接该数组添加元素即可。


<?php

session_start();          //启动session

$_SESSION["admin"] = null;    //生命一个admin的变量,并赋空值

?>

3.使用会话

首先判断会话变量是否有一个会话ID存在,不存在就创建一个,并且使其能通过全局数组$_SESSION 进行访问。如存在,则讲这个会话变量载入以供用户使用。

例如,判断用户名Session会话变量是否为空,不为空则复制给$myvalue,


<?php

if(!empty($_SESSION['session_name']))

  $myvalue = $_SESSION['session_name'];  

?>

4.删除会话

  (1)删除单个会话

  使用unset(),但是不能使用unset($_SESSION) 函数会将全局变量$_SESSION销毁,无法恢复,用户也不能再注册$_SESSION 变量。

unset($_SESSION['user']);

  (2)删除多个会话

$_SESSION = array();

  (3)结束会话

session_destroy();

session设置时间

1.客户端没禁止cookie

  (1) session_set_cookie_params() 必须在 session_start() 之前调用

<?php
$time = 1*60;              //设置Session失效时间
session_set_cookie_params($time);  //使用函数
session_start();             //初始化Session
$_SESSION[username] = 'mr';
?>

说明:不推荐使用此函数,一些浏览器有问题。

  (2) 使用Setcookie()


<?php

session_start();

$time = 1*60;                        //给出Session失效时间,1分钟

setcookie(session_name(),session_id(),time()+$time,"/");  //使用setcookie()手动设置Session失效时间

$_SESSION['user']='mr';

?>

2.客户端禁止Cookie

  (1)登录之前打开Cookie,很多论坛这么做

  (2)通过GET方法,隐藏表单传递session_id  (常用)

  (3)使用文件或数据库存储session_id,页面传递中手动调用

 

======================分===========割============线================

Session高级应用

1.Session临时文件

session_save_path()存储session临时文件,可缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题

示例:


<?php
$path = './tmp/'; // 设置session存储路径
session_save_path($path);
session_start(); // 初始化session
$_SESSION[username] = true;
echo "Session文件名称为:sess_" , session_id();
?>

注意:session_save_path()在session_start()函数之间

 

 

2.Session缓存

session缓存是将内容存储在IE客户端的Temporary Internet Files 文件夹下,可设置缓存时间,下次读取缓存内容,从而提速。

Session 缓存使用 session_cache_limiter() 函数

string session_cache_limiter([string cache_limiter])

  参数cache_limiter为public 或private。同时session缓存不在服务器端而是在客户端缓存,在服务器没显示。

  缓存时间,使用 session_cache_expire() 函数

int session_cache_expire([int new_cache_expire])

示例:


<?php
session_cache_limiter('private');
$cache_limit = session_cache_limiter(); session_cache_expire(30);
$cache_expire = session_cache_expire(); session_start();
?>

3.session数据库存储

session_set_save_handler()函数

bool session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)
参数 说明
open(save_path,session_name) 找到session存储地址,去除变量
close() 不需要参数,关闭数据库
read(key) 读取session键值,key对应session_id
write(key,data) 其中data对应设置的session变量 
destroy(key) 注销session对应session键值
gc(expiry_time) 清除过期session记录

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
function _session_open($save_path,$session_name)
{
    global $handle;
    $handle = mysql_connect('localhost','root','root'or die('数据库连接失败');       // 连接MYSQL数据库
    mysql_select_db('db_database11',$handleor die('数据库中没有此库名');               // 找到数据库
    return(true);
}
 
function _session_close()
{
    global $handle;
    mysql_close($handle);
    return(true);
}
 
function _session_read($key)
{
    global $handle;                         // 全局变量$handle 连接数据库
    $time = time();                         // 设定当前时间
    $sql "select session_data from tb_session where session_key = '$key' and session_time > $time";
    $result = mysql_query($sql,$handle);
    $row = mysql_fetch_array($result);
    if ($row)
    {
        return($row['session_data']);           // 返回Session名称及内容
    }else
    {
        return(false);
    }
}
 
function _session_write($key,$data)
{
    global $handle;
    $time = 60*60;                                      // 设置失效时间
    $lapse_time = time() + $time;                       // 得到Unix时间戳
    $sql "select session_data from tb_session where session_key = '$key' and session_time > $lapse_time";
    $result = mysql_query($sql,$handle);
    if (mysql_num_rows($result) == 0 )              // 没有结果
    {
        $sql "insert into tb_session values('$key','$data',$lapse_time)";     // 插入数据库sql语句
        $result = mysql_query($sql,$handle);
    }else
    {
        $sql "update tb_session set session_key = '$key',session_data = '$data',session_time = $lapse_time where session_key = '$key'";                                               // 修改数据库sql语句
        $result = mysql_query($sql,$handle);
    }
    return($result);
}
 
function _session_destroy($key)
{
    global $handle;
    $sql "delete from tb_session where session_key = '$key'";                 // 删除数据库sql语句
    $result = mysql_query($sql,$handle);
    return($result);
}
 
function _session_gc($expiry_time)
{
    global $handle;
    $lapse_time = time();                                   // 将参数$expiry_time赋值为当前时间戳
    $sql "delete from tb_session where expiry_time < $lapse_time"// 删除数据库sql语句
    $result = mysql_query($sql,$handle);
    return($result);
}
 
session_set_save_handler('_session_open','_session_close','_session_read','_session_write','_session_destroy','_session_gc');
 
session_start();
 
$_SESSION['user'] = 'mr';
$_SESSION['pwd'] = 'mrsoft';
?>

Session [php]的更多相关文章

  1. session实现购物车

    为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...

  2. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  3. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

  4. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  5. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  6. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  7. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  8. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  9. 修改session垃圾回收几率

    <?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...

  10. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

随机推荐

  1. ConfigParser简介

    一.ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类似于key-value 的配置 ...

  2. (转)C# TextBox ReadOnly / Enabled 时,后台无法取值问题

    当页面上的某个TextBox 设置了属性ReadOnly = "True" 或 Enabled = "False" 时,在客户端为其赋值后,在后台代码中却无法获 ...

  3. 企业建立私有云的N个理由

    简而言之,私有云意味着高效.安全.可控(技术路线是否可控另说了),也意味着高成本.有限弹性.(政绩工程不在讨论范围) 全面回答这个问题,其实包括两个部分:为什么要上云计算,以及为什么要采用私有化部署模 ...

  4. ubuntu - 安装软件问题

    problem & solution 问题1 - E: 无法定位软件包 @原因(1) - 没有添加相应软件的镜像源(软件源)    解决方案 用 gedit/vi/vim - 在 /etc/a ...

  5. zancun

    #include<iostream> #include<cstdio> using namespace std; ; int n; int avai[maxn], need[m ...

  6. vue_cli下开发一个简单的模块权限系统之实现登录

    因为我们需要和后端数据交互,所以我们需要安装axios,安装好以后在main.js引入 v-model是标识空间,v-on:click="doLogin"是登录事件 doLogin ...

  7. kuangbin专题十六 KMP&&扩展KMP HDU3347 String Problem(最小最大表示法+kmp)

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  8. [LOJ2027] [SHOI2016] 黑暗前的幻想乡

    题目链接 LOJ:https://loj.ac/problem/2027 洛谷:https://www.luogu.org/problemnew/show/P4336 Solution 这题很像[ZJ ...

  9. SP2713 GSS4 - Can you answer these queries IV

    题目大意 \(n\) 个数,和在\(10^{18}\)范围内. 也就是\(\sum~a_i~\leq~10^{18}\) 现在有两种操作 0 x y 把区间[x,y]内的每个数开方,下取整 1 x y ...

  10. ie浏览器(Internet Explorer)不播放背景音乐

    这里就不说bgsound了,支持格式较少 一个网站要加背景音乐,好些年没加背景音乐了,用embed标签把背景音乐加上了,Mozilla Firefox,Google Chrome,Safari都正常, ...