广

PHP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    在PHP3中实现SESSION的功能(一)

    2018-10-04 14:39:02 次阅读 稿源:互联网
    零七广告
    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 = '';
    }
    }
    ?>   

    原作者:不详  

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告