文档章节

PHP自定义Session

三毛々
 三毛々
发布于 2013/06/19 17:42
字数 328
阅读 224
收藏 0

下面为session类的代码

<?php
class session
{
	static function init()
	{
		session_set_save_handler(
				array("session","open"),
				array("session","close"),
				array("session","read"),
				array("session","write"),
				array("session","destroy"),
				array("session","gc")
		);
	}
	
	static function open($save_path,$session_name)
	{
		echo "session opening!<br>";
		/*global $db,$REMOTE_ADDR;
		 $rs = $db->Execute("select * from Sessions where SessionID='".session_id()."'");
		$arry=$rs->FetchRow();
		if( $rs && $arry)
		{
		$db->Execute("update Sessions set SessionLast=NOW() where SessionID='".session_id()."'");
		}
		else
		{
		$query = "insert into Sessions set SessionID='".session_id()."',SessionName='$REMOTE_ADDR',SessionLast='NOW()'";
		//echo $query;
		$db->Execute($query);
		}*/
		return true;
	}
	static function close()
	{
		return(true);
	}
	
	static function read($id)
	{
		echo "session reading now!<br>";
		global $db;
		return true;
		$timenow = strftime("%Y-%m-%d %H:%M:%S", time());
		$query = "select SessionData from Sessions where SessionID='$id' and SessionLast > '$timenow'";
		$rs = $db->Execute($query);
		if(list($SessionData) = $rs->FetchRow())
		{
			//echo $SessionData;
			return $SessionData;
		}
		else
		{
			return false;
		}
	}
	
	static function write($id,$sess_data)
	{
		echo "session writing now!<br>";
		global $db;
		$rs = $db->Execute("select SessionID from Sessions where SessionID='$id'");
		$num = $rs->RecordCount();
		$unix_time = time()+MY_SESS_TIME;
		//echo MY_SESS_TIME;
		$dateleft = strftime("%Y-%m-%d %H:%M:%S", $unix_time);
		if($num <= 0)
		{
			$sql = "insert into Sessions set SessionData='$sess_data', SessionName='".$_SERVER["REMOTE_ADDR"]."', SessionLast='$dateleft', SessionID='".session_id()."'";
		}
		else
		{
			$sql = "update Sessions set SessionData='$sess_data', SessionName='".$_SERVER["REMOTE_ADDR"]."', SessionLast='$dateleft' where SessionID='$id'";
		}
		$db->Execute($sql);
	}
	
	static function destroy($id)
	{
		echo "session destroying now!<br>";
		global $db;
		$sql = "DELETE FROM Sessions WHERE `SessionID` = '$id'";
		$rs = $db->Execute($sql);
		return $rs;
		// $sess_file = "$sess_save_path/sess_$id";
		//return(@unlink($sess_file));
	}
	
	/*********************************************
	 * WARNING - You will need to implement some *
	* sort of garbage collection routine here. *
	*********************************************/
	static function gc($maxlifetime)
	{
		echo "session maxlifetime now!<br>";
		global $db;
		$timenow = strftime("%Y-%m-%d %H:%M:%S", time());
		$sql = "DELETE FROM `$table_sessions` WHERE `SessionLast` < '$timenow'";
		return $sess_db->Execute($sql);
		//echo "now gc!<br>";
		return true;
	}
	// proceed to use sessions normally
}

使用方法

include("session.class.php"); 
session::init(); 
session_start(); 
define("MY_SESS_TIME", 3600); //SESSION 生存时长 
$_SESSION["test"] = "abcdef";




© 著作权归作者所有

共有 人打赏支持
三毛々
粉丝 16
博文 56
码字总数 33881
作品 0
成都
私信 提问
Yii 2 —— session

1.1 session 在Web应用中,session的重要性毋庸置疑。Yii 2中,使用Session类来管理session。 1.1.1 session数据加载 当用户登录以后,Yii 2会调用到webUser->renewAuthStatus(),在这里调用...

tywali
2016/11/15
0
0
php session操作

启用session 1、php.ini设置session存放位置 session.save_path = "d:tmp" 2、建立d:tmp文件夹 3、重启服务 #index1.php #index2.php //当会话自动开始或者通过 sessionstart() 手动开始的时......

指间沙170305
2016/10/19
0
0
Laravel项目和其它项目共享session问题

我这边总结一下,也许以后有人会需要, 其实Laravel的session并不是用PHP自带的session管理器。而是完完全全自己实现了一个。 注意是完完全全自己实现的,并不是传统意义上用sessionsetsaveh...

mdoo
2015/10/02
689
0
PHP Session原理分析

Session是以扩展的形式嵌入到PHP内核的,所以我们可以把Session当成扩展来看待。一般扩展被载入到PHP时会调用扩展的MINIT函数,Session也不例外,当Session被载入到PHP内核时,MINIT函数将会...

我不叫大脸猫
2012/09/13
0
7
谁能帮忙解释一下这段代码??

"; echo "数字口令: "; echo ""; echo ""; define("PI",3.1415926); //定义常量 function Encrypt($str){ return $str=$str<>PI; //右移,自定义解密算法 } if($_POST[sub]){ //通过post方式......

小栗子hl
2014/05/03
239
4

没有更多内容

加载失败,请刷新页面

加载更多

前嗅ForeSpider脚本教程:标准对象(一)

今天,小编主要为大家介绍一下:前嗅ForeSpider脚本中的标准对象:爬虫链接类url,urltext采集的所有状态及属性类,html标签节点类domItem和(html)dom类dom。具体内容如下: 一.爬虫链接类...

forespider
7分钟前
1
0
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify

在使用spring boot整合jpa时出现上述错误,在配置文件中,配置连接数据库的url时,加上useSSL=false url: jdbc:mysql://127.0.0.1:3306/数据库名称?serverTimezone=Asia/Shanghai&useSSL=fa...

朝如青丝暮成雪
17分钟前
1
0
JavaScript 为什么要有 Symbol 类型?

摘要: 为什么比怎么用更有意义。 原文:JavaScript 为什么要有 Symbol 类型 作者:前端小智 Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对象属性时。 但是,它...

Fundebug
19分钟前
0
0
vs code 配置.json文件引入makefile文件实现多文件编译

背景: 之前使用VS code写c++时,没使用到多文件,所以对launch.jason和task.jason配置没过多配置,但不支持多文件间的编译,调试。 注:主要针对较大的一些工程,涉及多个文件的编译,使用到...

shzwork
19分钟前
1
0
大神教你Nginx常用基础配置方案

Nginx的fastcgi模块参数设置 Nginx 有两个配置文件fastcgi_params、fastcgi.conf,两者唯一的区别是,fastcgi.conf 多一个参数 SCRIPT_FILENAME,diff显示如下: $diff fastcgi fastcgi_param...

Linux就该这么学
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部