php教程 php手册 php将session信息写入数据库

php将session信息写入数据库

Jun 06, 2016 pm 07:57 PM
http php session 정보 쓰다 데이터 베이스

http://www.cnblogs.com/zjfazc/archive/2012/09/06/2673803.html php默认使用文件来保存session数据,我们可以定义自己的session处理器来将session信息保存到数据库或其他地方 下面是php.ini中session的配置说明: session.save_handler=files ;存储和检索

http://www.cnblogs.com/zjfazc/archive/2012/09/06/2673803.html

php默认使用文件来保存session数据,我们可以定义自己的session处理器来将session信息保存到数据库或其他地方

下面是php.ini中session的配置说明:

 

session.save_handler = "files"
; 存储和检索与会话关联的数据的处理器名字。默认为文件("files")。
; 如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"。
; 有一个使用PostgreSQL的处理器:http://sourceforge.net/projects/phpform-ext/

session.save_path = "/tmp"
; 传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。
; Windows下默认为临时文件夹路径。
; 你可以使用"N;[MODE;]/path"这样模式定义该路径(N是一个整数)。
; N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。
; [MODE;]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。
; 这是一个提高大量会话性能的好主意。
; 注意0: "N;[MODE;]/path"两边的双引号不能省略。
; 注意1: [MODE;]并不会改写进程的umask。
; 注意2: php不会自动创建这些文件夹结构。请使用ext/session目录下的mod_files.sh脚本创建。
; 注意3: 如果该文件夹可以被不安全的用户访问(比如默认的"/tmp"),那么将会带来安全漏洞。
; 注意4: 当N>0时自动垃圾回收将会失效,具体参见下面有关垃圾搜集的部分。

session.name = "PHPSESSID"
;用在cookie里的会话ID标识名,只能包含字母和数字。

session.auto_start = Off
; 在客户访问任何页面时都自动初始化会话,默认禁止。
; 因为类定义必须在会话启动之前被载入,所以若打开这个选项,你就不能在会话中存放对象。

session.serialize_handler = "php"
; 用来序列化/解序列化数据的处理器,php是标准序列化/解序列化处理器。
; 另外还可以使用"php_binary"。当启用了WDDX支持以后,将只能使用"wddx"。

session.gc_probability = 1
session.gc_divisor = 100
; 定义在每次初始化会话时,启动垃圾回收程序的概率。
; 这个收集概率计算公式如下:session.gc_probability/session.gc_divisor
; 对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。

session.gc_maxlifetime = 1440
; 超过此参数所指的秒数后,保存的数据将被视为'垃圾'并由垃圾回收程序清理。
; 判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。
; 如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,
; 那么将以所有session.gc_maxlifetime指令中的最小值为准。
; 如果使用多层子目录来存储数据文件,垃圾回收程序不会自动启动。
; 你必须使用一个你自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。
; 比如,下面的脚本相当于设置了"session.gc_maxlifetime=1440" (24分钟):
; cd /path/to/sessions; find -cmin +24 | xargs rm

session.referer_check =
; 如果请求头中的"Referer"字段不包含此处指定的字符串则会话ID将被视为无效。
; 注意:如果请求头中根本不存在"Referer"字段的话,会话ID将仍将被视为有效。
; 默认为空,即不做检查(全部视为有效)。

session.entropy_file = ;"/dev/urandom"
; 附加的用于创建会话ID的外部高熵值资源(文件),
; 例如UNIX系统上的"/dev/random"或"/dev/urandom"

session.entropy_length = 0
; 从高熵值资源中读取的字节数(建议值:16)。

session.use_cookies = On
; 是否使用cookie在客户端保存会话ID

session.use_only_cookies = Off
; 是否仅仅使用cookie在客户端保存会话ID
; 打开这个选项可以避免使用URL传递会话带来的安全问题。
; 但是禁用Cookie的客户端将使会话无法工作。

session.cookie_lifetime = 0
; 传递会话ID的Cookie有效期(秒),0 表示仅在浏览器打开期间有效。

session.cookie_path = "/"
; 传递会话ID的Cookie作用路径。

session.cookie_domain =
; 传递会话ID的Cookie作用域。
; 默认为空表示表示根据cookie规范生成的主机名。

session.cookie_secure = Off
; 是否仅仅通过安全连接(https)发送cookie。

session.cookie_httponly = Off
; 是否在cookie中添加httpOnly标志(仅允许HTTP协议访问),
; 这将导致客户端脚本(JavaScript等)无法访问该cookie。
; 打开该指令可以有效预防通过XSS攻击劫持会话ID。

session.cache_limiter = "nocache"
; 设为{nocache|private|public}以指定会话页面的缓存控制模式,
; 或者设为空以阻止在http应答头中发送禁用缓存的命令。

session.cache_expire = 180
; 指定会话页面在客户端cache中的有效期限(分钟)
; session.cache_limiter=nocache时,此处设置无效。

session.use_trans_sid = Off
; 是否使用明码在URL中显示SID(会话ID)。
; 默认是禁止的,因为它会给你的用户带来安全危险:
; 1- 用户可能将包含有效sid的URL通过email/irc/QQ/MSN…途径告诉给其他人。
; 2- 包含有效sid的URL可能会被保存在公用电脑上。
; 3- 用户可能保存带有固定不变sid的URL在他们的收藏夹或者浏览历史纪录里面。
; 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,所以应当禁用。

session.bug_compat_42 = On
session.bug_compat_warn = On
; PHP4.2之前的版本有一个未注明的"BUG":
; 即使在register_globals=Off的情况下也允许初始化全局session变量,
; 如果你在PHP4.3之后的版本中使用这个特性,会显示一条警告。
; 建议关闭该"BUG"并显示警告。

session.hash_function = 0
; 生成SID的散列算法。SHA-1的安全性更高一些
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
; 建议使用SHA-1。

session.hash_bits_per_character = 4
; 指定在SID字符串中的每个字符内保存多少bit,
; 这些二进制数是hash函数的运算结果。
; 4: 0-9, a-f
; 5: 0-9, a-v
; 6: 0-9, a-z, A-Z, "-", ","
; 建议值为 5

url_rewriter.tags = "a=href,area=href,frame=src,form=,fieldset="
; 此指令属于PHP核心部分,并不属于Session模块。

; form和fieldset比较特殊:
; 如果你包含他们,URL重写器将添加一个隐藏的"",它包含了本应当额外追加到URL上的信息。
; 如果要符合XHTML标准,请去掉form项并在表单字段前后加上

标记。
; 注意:所有合法的项都需要一个等号(即使后面没有值)。
; 推荐值为"a=href,area=href,frame=src,input=src,form=fakeentry"。

将session信息写入到mysql数据库中


<?php <br><span>/*</span><span>============================文件说明======================================== <br>@filename:     session.class.php <br>@description:  数据库保存在线用户session,实现在线用户功能! <br>@notice:       session过期时间一个小时,因为我们的站点是使用cookie(有效时间是1小时)登录。                 <br>          因此我们只记录用户登录的时间,而不是刷新一次更新一次                 <br>          删除数据库中session记录的动作发生在用户超时后执行这个文件或正常退出(session_destory)  <br>@database:     database:sessions  field:sessionid(char32),uid(int10),last_visit(int10) <br>@author:       duanjianbo          <br>@adddate       2008-8-29 <br>=============================================================================<br></span><span>*/</span>
 <span>class</span><span> session { 
     </span><span>private</span> <span>$db</span><span>; 
     </span><span>private</span> <span>$lasttime</span>=3600;<span>//</span><span>超时时间:一个小时</span>
      <span>function</span> session(&<span>$db</span><span>) { 
         </span><span>$this</span>->db = &<span>$db</span><span>;
         </span><span>session_module_name</span>('user'); <span>//session文件保存方式,这个是必须的!除非在Php.ini文件中设置了</span>
         <span>session_set_save_handler</span><span>( 
             </span><span>array</span>(&<span>$this</span>, 'open'), <span>//</span><span>在运行session_start()时执行</span>
              <span>array</span>(&<span>$this</span>, 'close'), <span>//</span><span>在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行 </span>
             <span>array</span>(&<span>$this</span>, 'read'), <span>//</span><span>在运行session_start()时执行,因为在session_start时,会去read当前session数据</span>
             <span>array</span>(&<span>$this</span>, 'write'), <span>//</span><span>此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行</span>
              <span>array</span>(&<span>$this</span>, 'destroy'), <span>//</span><span>在运行session_destroy()时执行</span>
              <span>array</span>(&<span>$this</span>, 'gc') <span>//</span><span>执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc</span>
<span>         ); 
         </span><span>session_start</span>(); <span>//</span><span>这也是必须的,打开session,必须在session_set_save_handler后面执行</span>
<span>     } 
        </span><span>function</span> unserializes(<span>$data_value</span><span>) { 
         </span><span>$vars</span> = <span>preg_split</span><span>( 
             </span>'/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\|/', 
             <span>$data_value</span>, -1, PREG_SPLIT_NO_EMPTY |<span> 
             PREG_SPLIT_DELIM_CAPTURE 
         ); 
         </span><span>for</span> (<span>$i</span> = 0; <span>isset</span>(<span>$vars</span>[<span>$i</span>]); <span>$i</span>++<span>) { 
             </span><span>$result</span>[<span>$vars</span>[<span>$i</span>++]] = <span>unserialize</span>(<span>$vars</span>[<span>$i</span><span>]); 
         } 
         </span><span>return</span> <span>$result</span><span>; 
     }  
     </span><span>function</span> open(<span>$path</span>, <span>$name</span><span>) { 
         </span><span>return</span> <span>true</span><span>; 
     } 
     </span><span>function</span><span> close() { 
         </span><span>$this</span>->gc(<span>$this</span>-><span>lasttime);
         </span><span>return</span> <span>true</span><span>; 
     } 
    </span><span>function</span> read(<span>$SessionKey</span><span>){
         </span><span>$sql</span> = "SELECT uid FROM sessions WHERE session_id = '".<span>$SessionKey</span>."' limit 1"<span>; 
         </span><span>$query</span> =<span>$this</span>->db->query(<span>$sql</span><span>);
         </span><span>if</span>(<span>$row</span>=<span>$this</span>->db->fetch_array(<span>$query</span><span>)){
           </span><span>return</span> <span>$row</span>['uid'<span>];
         }</span><span>else</span><span>{
             </span><span>return</span> ""<span>; 
         }
              } 
     </span><span>function</span> write(<span>$SessionKey</span>,<span>$VArray</span><span>) { 
         </span><span>require_once</span>(MRoot.DIR_WS_CLASSES .'db_mysql_class.php'<span>);
        </span><span>$db1</span>=<span>new</span><span> DbCom();
       </span><span>//</span><span> make a connection to the database... now</span>
        <span>$db1</span>->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD,<span> DB_DATABASE);
        </span><span>$db1</span>->query("set names utf8"<span>);
        </span><span>$this</span>->db=<span>$db1</span><span>;
        </span><span>$SessionArray</span> = <span>addslashes</span>(<span>$VArray</span><span>);
         </span><span>$data</span>=<span>$this</span>->unserializes(<span>$VArray</span><span>);   
                          </span><span>$sql0</span> = "SELECT uid FROM sessions WHERE session_id = '".<span>$SessionKey</span>."' limit 1"<span>; 
         </span><span>$query0</span> =<span>$this</span>->db->query(<span>$sql0</span><span>);
         </span><span>if</span>(<span>$this</span>->db->num_rows(<span>$query0</span>)){
             <span>if</span> (<span>isset</span>(<span>$data</span>['webid']) && !<span>empty</span>(<span>$data</span>['webid'<span>])) { 
                </span><span>$this</span>->db->query("insert into `sessions` set `session_id` = '<span>$SessionKey</span>',uid='".<span>$data</span>['webid']."',last_visit='".<span>time</span>()."'"<span>);
             }    
                    </span><span>return</span> <span>true</span><span>;
         }</span><span>else</span><span>{
             </span><span>/*</span><span>$sql = "update `sessions` set "; 
             if(isset($data['webid'])){
             $sql .= "uid = '".$data['webid']."', " ;
             }
             $sql.="`last_visit` = null " 
                   . "where `session_id` = '$SessionKey'"; 
                               $this->db->query($sql); </span><span>*/</span>
             <span>return</span> <span>true</span><span>; 
         }    
     } 
   </span><span>function</span> destroy(<span>$SessionKey</span><span>) { 
      </span><span>$this</span>->db->query("delete from `sessions` where `session_id` = '<span>$SessionKey</span>'"<span>); 
      </span><span>return</span> <span>true</span><span>; 
    } 
    </span><span>function</span> gc(<span>$lifetime</span><span>) {
        </span><span>$this</span>->db->query("delete from `sessions` where unix_timestamp(now()) -`last_visit` > '".<span>$this</span>->lasttime."'"<span>);
        </span><span>return</span> <span>true</span><span>;
    } 
     } 
 </span>?> 
로그인 후 복사

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열로 모음을 계산하는 PHP 프로그램 문자열로 모음을 계산하는 PHP 프로그램 Feb 07, 2025 pm 12:12 PM

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). Apr 03, 2025 am 12:04 AM

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? Apr 03, 2025 am 12:03 AM

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

매치 표현식 (PHP 8)과 스위치와 어떻게 다른지 설명하십시오. 매치 표현식 (PHP 8)과 스위치와 어떻게 다른지 설명하십시오. Apr 06, 2025 am 12:03 AM

PHP8에서 매치 표현식은 표현식의 값에 따라 다른 결과를 반환하는 새로운 제어 구조입니다. 1) 스위치 명령문과 유사하지만 실행 명령문 블록 대신 값을 반환합니다. 2) 경기 표현식은 엄격하게 비교되어 (===) 보안을 향상시킵니다. 3) 스위치 명세서에서 가능한 파손을 피하고 코드의 단순성과 가독성을 향상시킵니다.

See all articles