精华内容
下载资源
问答
  • /**@author Fahy*数据库为mysql,*数据库名为session,表名为session,*表中字段包括PHPSESSID,update_time,client_ip,data*/class Session{private static $handler = null;private static $ip = null;private ...

    /*

    *@author Fahy

    *数据库为mysql,

    *数据库名为session,表名为session,

    *表中字段包括PHPSESSID,update_time,client_ip,data

    */

    class Session{

    private static $handler = null;

    private static $ip = null;

    private static $lifetime = null;

    private static $time = null;

    //配置静态变量

    private static function init($handler){

    self::$handler = $handler; //获取数据库资源

    self::$ip = !empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw'; //获取客户端ip

    self::$lifetime = ini_get('session.gc_maxlifetime'); //获取session生命周期

    self::$time = time(); //获取当前时间

    }

    //调用session_set_save_handler()函数并开启session

    static function start($pdo){

    self::init($pdo);

    session_set_save_handler(

    array(__CLASS__,'open'),

    array(__CLASS__,'close'),

    array(__CLASS__,'read'),

    array(__CLASS__,'write'),

    array(__CLASS__,'destroy'),

    array(__CLASS__,'gc')

    );

    session_start();

    }

    public static function open($path,$name){

    return true;

    }

    public static function close(){

    return true;

    }

    //查询数据库中的数据

    public static function read($PHPSESSID){

    $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";

    $stmt = self::$handler->prepare($sql);

    $stmt->execute(array($PHPSESSID));

    if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){

    return '';

    }

    if(self::$ip == $result['client_ip']){

    self::destroy($PHPSESSID);

    return '';

    }

    if(($result['update_time']+self::$lifetime)<:>

    self::destroy($PHPSESSID);

    return '';

    }

    return $result['data'];

    }

    /*

    *首先查询该session是否存在数据,如果存在,则更新数据,如果不存在,则插入数据

    */

    //将session写入数据库中,$data传入session中的keys和values数组

    public static function write($PHPSESSID,$data){

    $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?";

    $stmt = self::$handler->prepare($sql);

    $stmt->execute(array($PHPSESSID));

    if($result=$stmt->fetch(PDO::FETCH_ASSOC)){

    if($result['data'] != $data || self::$time > ($result['update_time']+30)){

    $sql = "update session set update_time=?,data=? where PHPSESSID = ?";

    $stmt = self::$handler->prepare($sql);

    $stmt->execute(array($self::$time,$data,$PHPSESSID));

    }

    }else{

    if(!empty($data)){

    try{

    $sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)";

    }catch(PDOException $e){

    echo $e->getMessage();

    }

    $sth = self::$handler->prepare($sql);

    $sth->execute(array($PHPSESSID,self::$time,self::$ip,$data));

    }

    }

    return true;

    }

    public static function destroy($PHPSESSID){

    $sql = "delete from session where PHPSESSID = ?";

    $stmt = self::$handler->prepare($sql);

    $stmt->execute(array($PHPSESSID));

    return true;

    }

    public static function gc($lifetime){

    $sql = "delete from session where update_time";

    $stmt = self::$handler->prepare($sql);

    $stmt->execute(array(self::$time-$lifetime));

    return true;

    }

    }

    //使用PDO连接数据库

    try{

    $pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193");

    }catch(PDOException $e){

    echo $e->getMessage();

    }

    //传递数据库资源

    Session::start($pdo);

    展开全文
  • 虽然通过改变 Session 存储文件夹使 Session 不至于将临时文件夹填满而造成站点瘫痪,但是可以计算一下,如果一个大型网站一天登录 1000 人,一个月登陆了30000人,这时站点中存在 30000 个Session 文件 ,然而要在...

    虽然通过改变 Session 存储文件夹使 Session 不至于将临时文件夹填满而造成站点瘫痪,但是可以计算一下,如果一个大型网站一天登录 1000 人,一个月登陆了30000人,这时站点中存在 30000 个Session 文件 ,然而要在这 30000 个文件夹中查询一个 session_id 应该不是一件很轻松的事情,这个时候就需要应用到 session 数据库存储, 也就是PHP 中的 session_set_save_handle()函数。其语法格式如下:直线电机原理结构图

    session_set_save_handle()函数的参数说明如下的形式:

    参 数

    说 明

    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 记录

    一般应用参数直接使用变量,但是此函数中参数为 6 个函数,而且在调用时只是调用函数名称的字符串。下面将分别介绍这几个参数,最后将这些函数封装到一个类中。

    (1)封装 session_open()函数,连接数据库,其代码格式如下:

    说明:在上面的代码中, $save_path和$session_name 两个参数并没有被使用,在这里可以将这两个参数去除,但是一般情况下还是建议朋友们保留输入的这两个参数,因为一般都会使用这两个变量。

    (2)封装 session_close()函数,关闭数据库的连接,其代码格式如下:

    说明: 在这个函数中是不需要任何参数的,所以不论是 Session 存储到数据库还是文件中,只需要返回 true 即可。 但如果是 MYSQL 数据库,最好是将数据库关闭,以保证以后不会出现麻烦。

    (3)封装 session_read()函数,在函数中设定当前时间的 UNIX 时间戳,根据 $key 值查找 Session 名称及内容,其实例代码如下所示:

    说明 存储进数据库中的 session_expiry 是 UNIX 时间戳。

    (4)封装session_write()函数, 函数中设置了 Session 失效时间, 查找 Session 名称及内容。如果查询的结果为空,则将当前页面中的 Session 根据 session_id、session_name 、失效时间插入到数据库中;如果查询结果不为空,则根据 $key 修改数据库中 Session 存储信息,返回执行的结果,其实例代码如下所示:

    (5)封装session_destroy()函数,根据 $key 值将数据库中 Session 删除,其代码显示如下:

    (6)封装session_gc()函数, 根据给出的失效时间删除过期 Session,其代码显示如下:

    以上为 session_set_save_handler()函数的 6 个参数(函数)。

    下面通过函数session_set_save_handler()实现 Session 存储数据库,其实现的代码如下:https://www.furuihua.cn/article/420.html

    展开全文
  • php中session默认的存储方式是硬盘,php也可以改变默认...1.建session表uid 是保留字段2.自定义session类3.测试程序运行测试程序后,查看数据库可以发现session表中已经增加了session记录。具体参考资料:http://cn2...

    php中session默认的存储方式是硬盘,php也可以改变默认的存储方式。

    主要使用到session_set_save_handler方法,下面分享下如何将session保存到MySql数据库中的具体代码。

    1.建session表

    uid 是保留字段

    2.自定义session类

    3.测试程序

    运行测试程序后,查看数据库可以发现session表中已经增加了session记录。

    具体参考资料:

    http://cn2.php.net/session_set_save_handler

    http://cn2.php.net/manual/zh/class.sessionhandlerinterface.php

    https://www.stanford.edu/dept/its/communications/webservices/wiki/index.php/How_to_use_MySQL-based_sessions#Add_session_handling_code_to_your_application

    http://avedo.net/402/mysql-based-session-mangagement-in-php/

    展开全文
  • 我们可以使用session_set_save_handler...下面是完整的演示代码//// 'sessions' table schema// create table sessions (// session_id char(32) not null,// session_data text not null,// session_expiration int...

    我们可以使用session_set_save_handler()来注册连接数据的函数。下面是完整的演示代码

    //

    // 'sessions' table schema

    // create table sessions (

    // session_id char(32) not null,

    // session_data text not null,

    // session_expiration int(11) unsigned not null,

    // primary key (session_id));

    //

    include_once 'DB.php';

    // Global Variables

    $dbh = NULL;

    function on_session_start ($save_path, $session_name) {

    global $dbh;

    $dbh = DB::connect('mysql://user:[email protected]/SITE_SESSIONS',

    true);

    if (DB::isError($dbh)) {

    die(sprintf('Error [%d]: %s',

    $dbh->getCode(), $dbh->getMessage()));

    }

    }

    function on_session_end ()

    {

    // Nothing needs to be done in this function

    // since we used persistent connection.

    }

    function on_session_read ($key)

    {

    global $dbh;

    $stmt = "select session_data from sessions";

    $stmt .= " where session_id = '$key'";

    $stmt .= " and session_expiration > now()";

    $sth = $dbh->query($sth);

    $row = $sth->fetchRow(DB_FETCHMODE_ASSOC);

    return $row['session_data'];

    }

    function on_session_write ($key, $val)

    {

    global $dbh;

    $val = addslashes($val);

    $insert_stmt = "insert into sessions values('$key', '$val', now() + 3600)";

    $update_stmt = "update sessions set session_data = '$val', ";

    $update_stmt .= "session_expiration = now() + 3600 ";

    $update_stmt .= "where session_id = '$key'";

    // First we try to insert, if that doesn't succeed, it means

    // session is already in the table and we try to update

    if (DB::isError($dbh->query($insert_stmt)))

    $dbh->query($update_stmt);

    }

    function on_session_destroy ($key)

    {

    global $dbh;

    $stmt = "delete from sessions where session_id = '$key'";

    $dbh->query($stmt);

    }

    function on_session_gc ($max_lifetime)

    {

    global $dbh;

    // In this example, we don't use $max_lifetime parameter

    // We simply delete all sessions that have expired

    $stmt = "delete from sessions where session_expiration < now()";

    $dbh->query($stmt);

    }

    session_start ();

    // Register the $counter variable as part

    // of the session

    session_register ("counter");

    // Set the save handlers

    session_set_save_handler ("on_session_start", "on_session_end",

    "on_session_read", "on_session_write",

    "on_session_destroy", "on_session_gc");

    // Let's see what it does

    $counter++;

    print $counter;

    session_destroy();

    ?>

    展开全文
  • session我们多半是保存在服务器中呀,但是今天有一个功能就是需要把session保存在数据库中,这样可以实现同ie多浏览了,下面我们一起来看具体实现例子。php中session默认的存储方式是硬盘,php也可以改变默认的存储...
  • 2020-12-14 15:44:50来源:亿速云阅读:83作者:Leah今天就跟大家聊聊有关利用ThinkPHP怎么将SESSION存入MYSQL数据库中,可能很多人都不太了解,为了让大家更加了解,小编大家总结了以下内容,希望大家根据这篇...
  • 前几天有朋友说他网站上有人刷虚拟物品,导致他损失太大,问我有没有什么简单的办法解决,他提出的要求是:同时只能由一个人登陆这个账号来避免...Session在PHP中默认的是以文件的形式保存在一个临时文件夹里面的...
  • 我们可以用session这种会话管理机制来构建购物车、监控站点网络访问,甚至还可以跟踪某一个用户具体是如何使用你的应用的。PHP默认的session处理行为已经能应付大部分的场景,但有时候我们还是希望能够主动一点来...
  • 一个开发环境有多个网站,需要使用不同的session,解决方案很多。不过这次也高大上一把,用数据库存,方便以后扩展。PostgreSQL版首先是数据库的部分--drop table php_sessioncreate unlogged table php_session...
  • PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用 uinx或者是liux上的...另一方面,如果服务器起采用群集的方式的话就不能保持session的一...
  • 在SQL Server中identity列是自动增量的列,每次插入新的列时该列会自动填入新...但是那都是在同一个session下的T-SQL,在一个存储过程中是可以用的,但是在C#中,如果用SqlDataAdapter的Fill方法来做就比较麻烦了。...
  • 使用的expree,中间件为cookie-parser,express-session,当对res.session.id进行赋值操作后,再调取其值会发现,此时它的值并... 目前猜测,session表中,也有一个字段是id,但是这个id是系统自动的,任何对这...
  • 出现如下错误 a different object with the ...我直接用hql的update(obj)语句更新一条数据,但是有两个字段因为没有值被更新成了null,所以想在更新前,先把这两个字段查出来赋值给实体类,这样更新的时候可以用到原来的值
  • 或者给session("imnum")赋值,否则程序会因为session失效或session("imnum")异常而出现问题 2008-10-17开始写鱼鱼 2008-10-18上午 基本完成数据库设计,包括了鱼鱼群表等,完成好友列表框架 2008-10-19完善好友列表...
  • 在开发中,1.Java model层定义基本数据类型都用其包装类。...2.可以在类中给字段赋值。例如public class DcbGaBet{private Integer betId;private Integer userId;private Integer sessionId = new ...
  • 客户端可以通过关键字组(FrontID 、SessionID 、OrderRef)唯一确定一笔报单,客户端在报单发出时未填写 OrderRef 字段,CTP 后台会自动为该报单的OrderRef 字段赋值并返回客户端。 2.OrderActionRef 与 OrderRef...
  • 报错: 无效的列类型:1111 造成原因:sql语句中通过#{变量名},变量名为空值会造成此异常 解决方案1:值为null的字段赋值空字符串 解决方案二,在session工厂中配置如下配置 ...
  • 1. hql: ...and accopt_time > ?" 2. query.setDate Query query = session.createQuery(hql);... //非日期字段赋值 for (i = 0; i < params.length-1; i++) { query.setString(i, params[i...
  • Flask建站小记

    2018-06-21 13:57:48
    1、session要在请求上下文环境下才能使用,不能脱离上下文去到另外的模块调用2、利用...字段属性循环取出字段属性,很方便的将试图中的参数传入模板中然后一一取值5、可先将渲染返回结果赋值给变量,这样可以先...
  • Hibernate锁

    2013-07-22 07:52:54
    给Session.load()方法第三个参数赋值 LockMode.UPGRADE 相当于sql的for update的实现 LockMode.UPGRADE_NOWAIT 相当于Oracle的for update nowait的实现 ----------------------------------- 乐观所 POJO类中添加...
  • 从空对象中获取 / 修改值,如从数据库获取数据赋值给对象,再从当前对象中取值。 访问或修改空对象的字段 取Null的长度(如数组) 将Null抛出 规避空指针的出现: 在使用对象时,确保将其初始化 声名引用变量时,...
  • orcale常用命令

    2009-08-04 00:34:59
    SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号。 五、SQL*PLUS使用 a、近入SQL*Plus $sqlplus ...
  • 脚下留心:注意传递setContentType方法的参数值的大小写 多学两招:修改某个Servlet将导致整个WEB应用程序被重新加载 5.5.2 让浏览器定时刷新网页或跳转至其他页面 210 动手体验:Refresh头字段的作用效果 ...
  • SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr; 说明:21是某个连接的sid数 然后用 kill 命令杀此进程号。 五、SQL*PLUS使用 a、近入SQL*Plus $sqlplus ...
  • 或者给session("fishnum")赋值,否则程序会因为session失效或session("fishnum")异常而出现问题 2008-10-17开始写鱼鱼 2008-10-18上午 基本完成数据库设计,包括了鱼鱼群表等,完成好友列表框架 2008-10-19完善好友...
  • 所以我们有两种方法:如果是读取一条记录的数据或者不多的数据,我们用DATAREADER采集数据,然后赋值给LABEL控件的Text属性即可;如果是读取大量数据我们就采用DATAGRID。 今天我们就来说一下DATAREADER: string ...
  • 精髓Oralcle讲课笔记

    2013-05-23 16:25:18
    --搜索字段更改名称(双引号 keepFormat 别名有特殊字符,要加双引号)。 5、--任何含有空值的数学表达式,最后的计算结果都是空值。 6、select ename||sal from emp; --(将sal的查询结果转化为字符串,与...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

给session赋值字段