• php里session的用法


    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 "已经退出社区......";
    }
    ?>

  • 相关阅读:
    表单
    表格
    浮动与定位实例中的问题
    浮动与定位
    BFC的布局规则以及触发条件
    发布为知笔记到博客
    处理为知笔记样式与博客园样式冲突
    文字处理
    块元素并行的问题
    标签嵌套规则
  • 原文地址:https://www.cnblogs.com/xlz307/p/3425349.html
Copyright © 2020-2023  润新知