PHP中的session默认情况下是使用客户端的Cookie。当客户端的Cookie被禁用时,会自动通过Query_String来传递。

Php处理会话的函数一共有11个,我们详细介绍一下将要用到几个函数。
1、 session_start

函数功能:开始一个会话或者返回已经存在的会话。
函数原型:boolean session_start(void);
返回值:布尔值

功能说明:这个函数没有参数,且返回值均为true。最好将这个函数置于最先,而且在它之前不能有任何输出,否则会报警,如:Warning: Cannot
send session cache limiter - headers already sent (output started at
/usr/local/apache/htdocs/cga/member/1.php:2) in
/usr/local/apache/htdocs/cga/member/1.php on line 3
2、 session_register

函数功能:登记一个新的变量为会话变量
函数原型:boolean session_register(string name);

返回值:布尔值。

功能说明:这个函数是在全局变量中增加一个变量到当前的SESSION中,参数name就是想要加入的变量名,成功则返回逻辑值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。

3、 session_is_registered
函数功能:检查变量是否被登记为会话变量。
函数原型:boobean
session_is_registered(string name);
返回值:布尔值

功能说明:这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。成功则返回逻辑值true。
4、
session_unregister
函数功能:删除已注册的变量。
函数原型:boolean
session_session_unregister(string name);
返回值:布尔值

功能说明:这个函数在当前的session之中删除全局变量中的变量。参数name就是欲删除的变量名,成功则返回true.
5、
Session_destroy
函数功能:结束当前的会话,并清空会话中的所有资源。
函数原型:boolean session
destroy(void);
返回值:布尔值。
功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true

上面介绍函数下文将会用到,但还有一些有关session的函数也介绍一下:
6、 session_encode

函数功能:sesssion信息编码
函数原型:string session_encode(void);
返回值:字符串

功能说明:返回的字符串中包含全局变量中各变量的名称与值,形式如:a|s:12:"it is a test";c|s:4:"lala"; a是变量名
s:12代表变量a的值"it is a test的长度是12 变量间用分号”;”分隔。
7、 session_decode

函数功能:sesssion信息解码
函数原型:boolean session_decode (string data)
返回值:布尔值

功能说明:这个函数可将session信息解码,成功则返回逻辑值true
8、 session_name
函数功能:存取当前会话名称

函数原型:boolean session_name(string [name]);
返回值:字符串

功能说明:这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name

9、 session_id
函数功能:存取当前会话标识号
函数原型:boolean session_id(string [id]);

返回值:字符串

功能说明:这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id

10、 session_unset
函数功能:删除所有已注册的变量。
函数原型:void session_unset (void)

返回值:布尔值

功能说明:这个函数和Session_destroy不同,它不结束会话。就如同用函数session_unregister逐一注销掉所有的会话变量。

编程思路
在社区、论坛中,我们常能看到当前在线的会员,使访问者有宾至如归之感。但这种程序是怎么做出来的呢?
流程如下:

建表user,保存注册用户信息。
字段
类型
备注
userid
Int(10)
用户序列号
auto_increment 关键字
username
Varchar(50)
用户匿称
userpwd

Varchar(50)
密码
email
Varchar(50)
电子信箱
oicq

Varchar(50)
OICQ号
signature
mediumtext
签名
imgurl

Varchar(50)
头像
joindate
Varchar(50)
加入时间
建类文件user.php
定义函数
exist($username)确认新注册用户是不是已经存在

nsert($username,$userpwd,$email,$oicq,$imgurl,$signature)插入注册用户

update($userid,$username,$userpwd,$email,$oicq,$imgurl,$signature) 更新用户数据

get_from_condition($con) 返回满足查询条件的记录集

建表session。当用户登录时即向此表插入新记录,离开或超时后删除记录,保证表中保存的是当前在线的用户。
字段
类型
备注

sessionid
Int(10)
序列号 auto_increment 关键字
userid
Int(10)

用户序列号取自user表
ipaddress
Varchar(50)
Ip地址
lastactivity

Int(10)
最后活动时间,用它来判断用户是否还在线
建类文件session.php 定义函数

insert($userid,$ipaddress,$lastactivity) 把登录成功的用户插入到表中

update($userid,$ipaddress,$lastactivity)更新在线用户最后活动时间

del($con)删除满足条件的用户,用它来清除离线用户
get_from_condition($con) 返回满足查询条件的记录集

公用文件global.php
include "class/config.inc.php"; //把配置文件包含进来
$db = new
db;
$db-> db_connect( ); //连接数据库
$user = new user; //初始化
$session
= new session;
//启动会话
session_start();

//删除session表中已经过期的用户(即非在线网友)因为此文件总是被调用从而保证显示的都是当前在线的用户
$curtime=time();

$con="lastactivity<$curtime";
$session->del($con);

//正在线的网友需不断更新session表中的lastactivity时间,并重新设置用户的COOKIES
if
($HTTP_SESSION_VARS["online"]=="on"){ //此处也可用$_SESSION[“online”]

$userid=$HTTP_SESSION_VARS["userid"]; //取当前在线用户的userid

$ipaddress=substr($REMOTE_ADDR,0,50);
$lastactivity=time()+3600;
//更新最后活动时间,如时一个小时之内未调动页面就认为用户已离线,从而会被删除。

$session->update($userid,$ipaddress,$lastactivity);
}else{

//如果未登录那直接转入登录页面
$firstpage="logon.php";
header ("Location:
$firstpage");
exit;
}
登录文件logon.php
if ($hiddenField=="0"){
//测检表单有未被提交
$con="username='$username' and userpwd='$userpwd'";

$result=$user->get_from_condition($con);
if ($user->counter==1){

if (!session_is_registered("online")){//检测是否被登记过

session_register("online"); //登记一个新的变量为会话变量
}
if
(!session_is_registered("ccauser")){
session_register("ccauser");
}

if (!session_is_registered("userid")){
session_register("userid");
}

$ccauser=$username; //给会话变量赋值
$online="on";
//这个变量在global.php用到以更新最后活动时间lastactivity
$userid=$user->userid;

$ipaddress=substr($REMOTE_ADDR,0,50);
$lastactivity=time()+3600;

$con=" userid=$userid";
$session->get_from_condition($con);

//判断会话是否存在,有可能你在不同的机器上登两次。
if ($session->counter==1){

$session->update($userid,$ipaddress,$lastactivity); //如存在,更新
}else{

$session->insert($userid,$ipaddress,$lastactivity); //如不存在,插入
}

//在客户机设置COOKIES
SetCookie("ccauser",$username,time()+3600);

Header("Location:test.php");//然后导向测试页
}
}
?>

if($HTTP_SESSION_VARS["online"]=="") { //判断是否已登录
?>
//下面是登录的表单

名称:
密码:
}else{
echo "网友:".$HTTP_COOKIE_VARS["ccauser"]."你已经登录了";
//如果已登录则显示提示
$str="
[url=exit.php]退出社区[/url]";
echo $str;
}

?>
测试文件test.php
include "global.php"; //把global.php文件包含进来

$strWelcome="欢迎[color=red]".$_SESSION['ccauser']."[/color]
";
echo
$strWelcome; //显示欢迎信息
$str=” 当前在线用户:
===================
”;

$con=" 1=1";
//提出session表中所有记录即是当前在线用户,未把游客算在内

$result=$session->get_from_condition($con);

while($row=mysql_fetch_array($result)){
$con1="userid=$row[userid]";

$user->get_from_condition($con1);
$str.=$user->username." ";
}

echo $str;
?>
[url=exit.php]退出社区[/url]
退出文件exit.php

include "global.php"; //把global.php文件包含进来
if
($_SESSION["online"]=="on"){
$con="userid=$userid";

$session->del($con); //在session表中删除用户信息。
session_destroy();
//结束当前的会话,并清空会话中的所有资源
echo "已经退出社区......";
}
?>

php里session的用法的更多相关文章

  1. 一招制胜---详解分布式系统里session同步

    一招制胜---详解分布式系统里session同步 几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同 ...

  2. thinkPHP中session()方法用法详解

    本文实例讲述了thinkPHP中session()方法用法.分享给大家供大家参考,具体如下: 系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成. 用法 ? ...

  3. 数据库的修改和删除;比较标签代替<,>,=号;模板替换;session的用法

    注: 1.session:系统默认开启;用途:防止跳过登录(只能访问登录方法);session和cookie的用法(手册->专题); 赋值:session('name','value'); 取值 ...

  4. Session,ViewState用法

      基本理论: session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, ...

  5. Hibernate(或其它ORM)里的inverse用法详解,内容摘自Java web轻量级开发面试教程

    本文来是从 java web轻量级开发面试教程从摘录的. Inverse的英文含义是反转,在Hibernate中用来决定是由哪方来维护两个业务实体类之间的关联关系,具体而言,就是由哪方去设置这个被外键 ...

  6. php 中cookie和session的用法比较

    1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session. ...

  7. 分布式系统里session同步的那些事儿

    几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了 ...

  8. session cookie用法

    1.session(1)session存储在服务器的(2)session每个人存一份(3)session有默认的过期时间(4)session里面可以存储任意类型的数据安全,对服务造成压力用法:1.当一 ...

  9. python Cookie Session 相关用法

    Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...

随机推荐

  1. 完美解决 .txt文件在Mac上不能打开的问题

  2. HTML页引用CSS

    方法1 使用import 方法引用CSS <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...

  3. office-002-onenote、word、outlook取消首字母大小写图文详解

    此文主要讲述如何取消微软办公软件 onenote.work.outlook 中首字母大写等的自动更正项,其他 office 办公软件相关设置的操作,可参考此文进行相应的设置.希望能对亲有所帮助,若有错 ...

  4. 最简单的PC机串口通信程序

    把串口当作文件IO来操作,简单易行!    已验证,gcc和tcc都可以编译成功,并使用.  需注意,先有串口,改好红色字体串口号再编译运行! #include <stdio.h>  #i ...

  5. C语言:通过返回指针的形式找出数组的最大值和最小值

    // //  main.c //  Pointer_max_min(return) // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 ...

  6. MSYS2 安装和配置

    MSYS2 安装和配置 msys2 和 cygwin 类似,提供了一个类 Linux 的 shell 环境和工具链,同时还使用了 arch linux 的 pacman 管理软件包,比 cygwin ...

  7. you need to upgrade the working copy first

    is too old (format 29) to work with client version '1.9.4 (r1740329)' (expects format 31) 2016年09月18 ...

  8. echarts html传参+js请求+ashx服务 代码方式

    html 头传参方式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  9. Eclipse/Myeclipse 开发项目技巧

    Eclipse/Myeclipse 开发项目 编程的本质: 把现实生活中的业务逻辑用代码实现. eclipse 是一个开放源代码.基于Java的可扩展开发平台. (最初主要用来Java语言开发,但目前 ...

  10. oracle恢复备份数据

    sqlplus链接数据库: 1.sqlplus 用户名/密码@IP地址/数据库名称 2.sqlplus 用户名/密码@数据库名称 注:第二种方法要在tnsnames.oRA文件中配置数据库名称 链接断 ...