仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1226|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:在PHP3中完成SESSION的功效(一)

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:04:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大家如果能懂得“熟能生巧”的道理也就明白了这并不是浪费时间,同时这也可以减轻板主的负担,让他们有时间去处理更难的问题。   SESSION函数库:session.inc.php3

<?php
if (!isset($__session_inc__)){
$__session_inc__=1;
//require("cookie.inc.php3");
# -------------------------------------------------------------------  
# Session Management v1.0 21.6.1998  
# (c) Wild Karl Heinz <kh.wild@wicom.at>  
#  
# This Include handle Session based variable handling  
#  
# Please feel free and use it. If you make it more functional  
# it would be nice to send me a copy.  
#  
# Don’t forget - Mysql_connect !  
#  
# The database structure  
# Table structure for table ’session’  
#  
# CREATE TABLE session (  
# id int(11) DEFAULT ’0’ NOT NULL auto_increment,  
# sid varchar(20) DEFAULT ’’ NOT NULL,  
# val blob,  
# times timestamp(14),  
# PRIMARY KEY (id),  
# KEY sid (sid),  
# UNIQUE sid_2 (sid)  
# );  
#  
# You’ll miss here a cron job to delete the old sessions from db  
# -------------------------------------------------------------------  

// 请注重下面被正文失落的CREATE TABLE语句,
// 你需求在你所利用的数据库上履行这条语句,
// 表名也能够不是session,那末就需求设置上面的$sess_table变量了。

// 此处你需求设置库名,和表名。
// 不外普通建议就利用session作为表名
$sess_db = ’dbname’;  
$sess_table = ’session’;  

# ----------------------------------------------------  
# Session_CheckID - 反省、设置并前往 Session-ID  
# 参数......: cookie保留工夫(以分钟计)
# 也可不设置暗示这个 cookie 只在以后session 无效
# 这其实就象ASP中SESSION的时效一样。
# 前往值....: 一个独一的Session-ID (作为cookie存储)
# ----------------------------------------------------  
function Session_CheckID( $min )  
{
global $sess_sid;  

if( !$sess_sid ) {  
$sess_sid = uniqid( SC ); //获得一个独一的随机数
/*
if( $min > 0 ) {  
SetCookie("sess_sid", $sess_sid, time()+($min*60), "/", "", 0 );  
}  
else {  
SetCookie("sess_sid", $sess_sid, "", "/", "", 0 );  
}  
下面是本来的代码,会失足。所以别的用了一个更好的函数。
函数库:cookie.inc.php3
*/
jssetcookie("sess_sid",$sess_sid,$min);
return( false );  
}  
else {  
return( true );  
}  
}  

# ----------------------------------------------------------  
# str2arr - 将字符串转换成session数组
# 参数.....: string
# 前往值...: 全局数组(其实就是session)  
#本函数用处:将字符串转换成session数组
#如"session[username]=yourid&session[userpass]=12345"
#将会被转换成上面的数组
# session[username]="yourid"
# session[userpass]="12345"
#请注重函数split(),each(),list(),eval()的用法。
# ----------------------------------------------------------  
function str2arr( $ts )  
{  
global $session;  

$vals = split( "&", $ts );  
while( list($key,$val) = each($vals) ) {  
list( $name, $wert ) = split( "=", $val );  
if( $val ) eval( "$$name = "$wert";" );  
}  
}  

# ----------------------------------------------------------  
# session_read() - 从SESSION表中取数据,转换成session数组  
# 参数........: 无
# 前往值......: 假如读出数据,前往 true ,不然前往 false
#注重.........: 用到了str2arr()这个函数
# ----------------------------------------------------------  
function session_read()  
{  
# Hash array to keep session-variables  
global $session;  
global $sess_sid, $sess_db, $sess_table, $sess_error;  

$sel = "Select val from $sess_table where sid = ’$sess_sid’";  
$res = mysql_db_query( $sess_db, $sel );  
if( mysql_numrows( $res ) ) {  
$val = mysql_result( $res, 0, "val" );  
str2arr( $val );  
mysql_free_result( $res );  
return( true );  
}  
else {  
return( false );  
$sess_error = mysql_error();  
}  
}  

# ------------------------------------------------------  
# Split_Array() - 将session数组转换成字符串
# 参数.......: 数组
# 前往值.....: 数组转换得来的字符串  
#  
# Thanks to Rasmus (此人好象是PHP的创造人)
# 注重:将session数组转换成字符串
#如session[username]="yourid"
# session[userpass]="12345"
#将会被转换成"session[username]=yourid&session[userpass]=12345"
#同时该函数思索到了数组的某个元素也是数据的情形
#这个函数被设计成一个递归函数
# ------------------------------------------------------  
function Split_Array( $arr, $a = "", $b = "", $c = "" )  
{  
while( list( $key, $val ) = each( $arr ) ) {  
if( is_array( $val ) ) {  
$ts .= Split_Array( $arr[ $key ],  
( strlen( $a ) ? $a : $key ),  
( strlen( $b ) ? $b : ( strlen( $a ) ? $key : "" ) ),  
( strlen( $c ) ? $c : ( strlen( $b ) ? $key : "" ) ) );  
}  
else {  
$ts .= "session";  
$ts .= $a ? "[$a]" : "";  
$ts .= $b ? "[$b]" : "";  
$ts .= $c ? "[$c]" : "";  
$ts .= "[$key]=$val&";  
}  
}  
return( $ts );  
}  

# ---------------------------------------------------  
# session_write - 将session数组转换成字符串,再存到session表中  
# 参数.: 无
# 前往值...: 假如存入正常前往 true ,不然前往 false
# ---------------------------------------------------  
function session_write()  
{  
# Hash array to keep session-variables  
global $session;  

global $sess_sid, $sess_db, $sess_table;  
global $sess_error;  

# if you like to delete a session-cookie  
# you must check it before writting the session  
# array  

if( !$sess_sid ) { session_checkid( 0 ); }  

$ts = Split_Array( $session );  
if( $ts > "" ) { $ts = substr( $ts, 0, strlen( $ts ) - 1 ); }  
$res = mysql_db_query( $sess_db, "Select * from session where sid = ’$sess_s’");  
if( mysql_numrows( $res ) == 0 ) {  
$sel = "Insert into $sess_table ( id, sid, val, times ) ";  
$sel .= "values( 0, ’$sess_sid’, ’$ts’, NULL )";  
}  
else {  
$sel = "Update $sess_table set val = ’$ts’, ";  
$sel .= "times = NULL where sid = ’$sess_sid’";  
}  
if( !mysql_db_query( $sess_db, $sel ) ) {  
$sess_error = mysql_error();  
return( false );  
}  
else { return( true ); }  
}  

# ---------------------------------------------  
# session_del - 排除以后一切的session
# 并删除session表中和以后session有关的纪录  
# 参数.....: 一个随机的session id  
# 前往值...: 无
# ---------------------------------------------  
function session_del()  
{  
global $session, $sess_db, $sess_table, $sess_sid;  

$sel = "Delete from $sess_table where sid = ’$sess_sid’";  
if( !mysql_db_query( $sess_db, $sel ) ) {  
$sess_error = mysql_error();
}
$sess_sid = ’’;
}
}
?>   
学校并没有那么多的时间可以让我们在实际开发上面。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-2-4 08:42:09 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
admin 该用户已被删除
板凳
发表于 2015-2-6 14:32:43 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-15 20:46:18 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-25 00:11:18 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
精灵巫婆 该用户已被删除
6#
发表于 2015-3-3 11:03:43 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
谁可相欹 该用户已被删除
7#
发表于 2015-3-11 01:28:52 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
爱飞 该用户已被删除
8#
发表于 2015-3-11 10:52:01 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
不帅 该用户已被删除
9#
发表于 2015-3-16 03:16:20 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
蒙在股里 该用户已被删除
10#
发表于 2015-3-17 12:10:41 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
飘灵儿 该用户已被删除
11#
发表于 2015-3-24 09:49:49 | 只看该作者
爱上php,他也会爱上你。
金色的骷髅 该用户已被删除
12#
发表于 2015-3-24 23:37:39 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
13#
发表于 2015-3-25 12:54:11 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
再现理想 该用户已被删除
14#
发表于 2015-4-16 02:10:19 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-16 09:10:48 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
变相怪杰 该用户已被删除
16#
 楼主| 发表于 2015-4-17 00:13:59 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
因胸联盟 该用户已被删除
17#
发表于 2015-4-20 17:08:22 | 只看该作者
当然这种网站的会员费就几十块钱。
透明 该用户已被删除
18#
发表于 2015-5-4 12:48:48 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
莫相离 该用户已被删除
19#
发表于 2015-5-6 13:12:21 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
小魔女 该用户已被删除
20#
发表于 2015-5-6 18:21:31 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表