Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 4267

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>session_set_save_handler</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="Session 会话处理函数"
HREF="ref.session.html"><LINK
REL="PREVIOUS"
TITLE="session_set_cookie_params"
HREF="function.session-set-cookie-params.html"><LINK
REL="NEXT"
TITLE="session_start"
HREF="function.session-start.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="refentry"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="function.session-set-cookie-params.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="function.session-start.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="function.session-set-save-handler"
></A
>session_set_save_handler</H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN208707"
></A
><P
>    (PHP 4, PHP 5)</P
>session_set_save_handler&nbsp;--&nbsp;
     Sets user-level session storage functions
    </DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN208710"
></A
><H2
>Description</H2
>bool <B
CLASS="methodname"
>session_set_save_handler</B
> ( callback open, callback close, callback read, callback write, callback destroy, callback gc )<BR
></BR
><P
>&#13;     <B
CLASS="function"
>session_set_save_handler()</B
> sets the user-level
     session storage functions which are used for storing and
     retrieving data associated with a session.  This is most useful
     when a storage method other than those supplied by PHP sessions
     is preferred.  i.e. Storing the session data in a local database.
     如果成功则返回 <TT
CLASS="constant"
><B
>TRUE</B
></TT
>,失败则返回 <TT
CLASS="constant"
><B
>FALSE</B
></TT
>。
    </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
      The "write" handler is not executed until after the output
      stream is closed.  Thus, output from debugging statements in the
      "write" handler will never be seen in the browser.  If debugging
      output is necessary, it is suggested that the debug output be
      written to a file instead.
     </P
></BLOCKQUOTE
></DIV
><P
>&#13;     The following example provides file based session
     storage similar to the PHP sessions default save handler
     <CODE
CLASS="parameter"
>files</CODE
>.  This example could easily be
     extended to cover database storage using your favorite PHP
     supported database engine.
    </P
><P
>&#13;     Read function must return string value always to make save
     handler work as expected. Return empty string if there is no data
     to read. Return values from other handlers are converted to
     boolean expression. <TT
CLASS="constant"
><B
>TRUE</B
></TT
> for success, <TT
CLASS="constant"
><B
>FALSE</B
></TT
> for failure.
    </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;      Write and Close handlers are called after destructing objects since PHP
      5.0.5. Thus destructors can use sessions but session handler can't use
      objects. In prior versions, they were called in the opposite order. It
      is possible to call <A
HREF="function.session-write-close.html"
><B
CLASS="function"
>session_write_close()</B
></A
> from the
      destructor to solve this chicken and egg problem.
     </P
></TD
></TR
></TABLE
></DIV
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN208748"
></A
><P
><B
>例 1. 
       <B
CLASS="function"
>session_set_save_handler()</B
> example
      </B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">open</font><font color="#007700">(</font><font color="#0000BB">$save_path</font><font color="#007700">, </font><font color="#0000BB">$session_name</font><font color="#007700">) <br />{<br />&nbsp;&nbsp;global </font><font color="#0000BB">$sess_save_path</font><font color="#007700">;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font color="#0000BB">$sess_save_path </font><font color="#007700">= </font><font color="#0000BB">$save_path</font><font color="#007700">;<br />&nbsp;&nbsp;return(</font><font color="#0000BB">true</font><font color="#007700">);<br />}<br /><br />function </font><font color="#0000BB">close</font><font color="#007700">() <br />{<br />&nbsp;&nbsp;return(</font><font color="#0000BB">true</font><font color="#007700">);<br />}<br /><br />function </font><font color="#0000BB">read</font><font color="#007700">(</font><font color="#0000BB">$id</font><font color="#007700">) <br />{<br />&nbsp;&nbsp;global </font><font color="#0000BB">$sess_save_path</font><font color="#007700">;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font color="#0000BB">$sess_file </font><font color="#007700">= </font><font color="#DD0000">"$sess_save_path/sess_$id"</font><font color="#007700">;<br />&nbsp;&nbsp;return (string) @</font><font color="#0000BB">file_get_contents</font><font color="#007700">(</font><font color="#0000BB">$sess_file</font><font color="#007700">);<br />}<br /><br />function </font><font color="#0000BB">write</font><font color="#007700">(</font><font color="#0000BB">$id</font><font color="#007700">, </font><font color="#0000BB">$sess_data</font><font color="#007700">) <br />{<br />&nbsp;&nbsp;global </font><font color="#0000BB">$sess_save_path</font><font color="#007700">;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font color="#0000BB">$sess_file </font><font color="#007700">= </font><font color="#DD0000">"$sess_save_path/sess_$id"</font><font color="#007700">;<br />&nbsp;&nbsp;if (</font><font color="#0000BB">$fp </font><font color="#007700">= @</font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#0000BB">$sess_file</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$return </font><font color="#007700">= </font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$sess_data</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#0000BB">$return</font><font color="#007700">;<br />&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;return(</font><font color="#0000BB">false</font><font color="#007700">);<br />&nbsp;&nbsp;}<br /><br />}<br /><br />function </font><font color="#0000BB">destroy</font><font color="#007700">(</font><font color="#0000BB">$id</font><font color="#007700">) <br />{<br />&nbsp;&nbsp;global </font><font color="#0000BB">$sess_save_path</font><font color="#007700">;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font color="#0000BB">$sess_file </font><font color="#007700">= </font><font color="#DD0000">"$sess_save_path/sess_$id"</font><font color="#007700">;<br />&nbsp;&nbsp;return(@</font><font color="#0000BB">unlink</font><font color="#007700">(</font><font color="#0000BB">$sess_file</font><font color="#007700">));<br />}<br /><br />function </font><font color="#0000BB">gc</font><font color="#007700">(</font><font color="#0000BB">$maxlifetime</font><font color="#007700">) <br />{<br />&nbsp;&nbsp;global </font><font color="#0000BB">$sess_save_path</font><font color="#007700">;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;foreach (</font><font color="#0000BB">glob</font><font color="#007700">(</font><font color="#DD0000">"$sess_save_path/sess_*"</font><font color="#007700">) as </font><font color="#0000BB">$filename</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;if (</font><font color="#0000BB">filemtime</font><font color="#007700">(</font><font color="#0000BB">$filename</font><font color="#007700">) + </font><font color="#0000BB">$maxlifetime </font><font color="#007700">&lt; </font><font color="#0000BB">time</font><font color="#007700">()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#0000BB">unlink</font><font color="#007700">(</font><font color="#0000BB">$filename</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return </font><font color="#0000BB">true</font><font color="#007700">;<br />}<br /><br /></font><font color="#0000BB">session_set_save_handler</font><font color="#007700">(</font><font color="#DD0000">"open"</font><font color="#007700">, </font><font color="#DD0000">"close"</font><font color="#007700">, </font><font color="#DD0000">"read"</font><font color="#007700">, </font><font color="#DD0000">"write"</font><font color="#007700">, </font><font color="#DD0000">"destroy"</font><font color="#007700">, </font><font color="#DD0000">"gc"</font><font color="#007700">);<br /><br /></font><font color="#0000BB">session_start</font><font color="#007700">();<br /><br /></font><font color="#FF8000">// proceed to use sessions normally<br /><br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     See also the <A
HREF="ref.session.html#ini.session.save-handler"
>session.save_handler</A
>
     configuration directive.
    </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="function.session-set-cookie-params.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="function.session-start.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>session_set_cookie_params</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.session.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>session_start</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>