设为首页   加入最爱           最新更新:全方位英文文章资料库
 
资料坊搜索: 标题 全文     
在PHP3中实现SESSION的功能
   首页>>YesizeCOM>>电脑技能坊>>PHP>>正文       
 
广告招租,e-mail:yesize@hotmail.com

广告招租,e-mail:yesize@hotmail.com


<?php require("cookie.inc.php3") ; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<P>在网页的任何地方设置cookie
<?php
if (!$show){
    $username="liubing";
    jssetcookie("username","liubing",1);
    echo "<p>cookie username 被设置成  $username<br>";
    echo "有效期1分钟<br>" ;
    echo "<a href=$PATH_INFO?show=1> 试一下cookiee 有没有起作用</a>" ;
}
else{
    echo "<p>读到的cookie username 值为: $username<br>";
    echo "有效期1分钟,1分钟后再刷新本页面就会看不到了<br>" ;
</a>" ;
}

?>
</body>
</html>

<?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.
#
# Dont 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)
#  );
#
# Youll 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 = ;
}
}
?> 

<?php
if (!isset($__cookie_inc__)){
$__cookie_inc__=1;
function JsSetCookie($CName,$CValue,$CExpr=FALSE){
// 这个函数允许你在HTML头标记之后设置cookie ,
// 可以作SetCookie函数的补充,甚至代替。
// $CName.....: cookie 的名字
// $CValue....: cookie 的值
// $CEXpr.....: cookie 的有效期,以分钟为单位,也可以修改加入小时,天数
  
if($CExpr > 0){
$CookieString="astr= $CName + = + $CValue + ;expires= + expr + ;path=/;";
$Cookie.="\n<script language=\"javascript\">\n";
$Cookie.=function makeYearExpDate(min){
var expire = new Date();
expire.setTime(expire.getTime() + ((min * 60) * 1000));
expire = expire.toGMTString()
return expire
}
expr =makeYearExpDate(.$CExpr.);;
$Cookie.="\n".$CookieString."\n";
$Cookie.="document.cookie=astr;\n</script>\n";
}else{
$Cookie.="\n<script language=\"javascript\">\n";
$Cookie.="document.cookie=$CName=$CValue;path=/;";
$Cookie.="\n</script>\n";
}
echo $Cookie;
}
}
?>

<?php require( "session.inc.php3");
require("cookie.inc.php3");
?>
<?php
   session_checkid( 20 ); //20分钟后session失效
    //下面你需要设置mysql的连接参数
    mysql_connect(localhost,user,pass) or Die("cant connect to db!");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Session/Cookie-测试</title>
</head>
<body>
<h2>This Page should show how to handle the "session.inc.php3" library</h2>
<h3>We will use a mask with a record showing routine</h3>
<?php
if( $show ) {
    if( session_read() ) {
        $username = $session[username];
        $userpass = $session[userpass];
        echo "<P>session[username]:$username<br>session[userpass]:$userpass";
    }
}
else{
    $session[username]="yourid";
    $session[userpass]="12345";
    if( !session_write() ) {
        print $sess_error;
    }else{
        echo "<p>session[username]被设置成:$session[username]<br>" ;
        echo "session[userpass]被设置成:$session[userpass]<br>" ;
        echo "<a href=$PATH_INFO?show=1>测试一下SESSION的作用</a>" ;
    }
}
?>

</body>
</html>


上一篇:怎样校验输入的日期为合法的日期 下一篇:require()和include()的区别

版权说明:作品来源于网上,版权归作者所有,如果无意中侵犯了您的版权,请来信告知,本站将在3个工作日内删除。yesize@hotmail.com
  热门小游戏分类 
射击小游戏 连连看小游戏
台球小游戏 成人小游戏
CS小游戏 化妆小游戏
赛车小游戏 休闲小游戏
篮球小游戏 换装小游戏
儿童小游戏 牛牛小游戏
麻将小游戏 冒险小游戏
美媚小游戏 益智小游戏
体育小游戏  
Society Recreation & Sports
Travel & Leisure Communications
Vehicles Computers
Fashion Arts & Entertainment
Reference & Education Disease & Illness
Writing & Speaking Politics
Product Reviews Food & Beverage
Finance Internet Business
Self Improvement Home & Family
Health & Fitness Business
最新更新内容
警惕“公务员报考热”背
公务员考试不是丈母娘考
一名新公务员的自白:我
公务员考脑筋急转弯与挂
北努斗:2006行政能力测
大讨论:06行测BT题目大
过来人回忆:当年,我也
一家之言:公务员热折射
公务员考试申论要是有正
数十万大学生走进公务员
      粤ICP备05005424         Copyright ©2000 - 2004 Yesize.COM