php SESSION类(购物车类)

关于 SESSION 在 php 中的应用是必不要少的,最重要的功能之一,SESSION 在网络应用中,称为“会话”,我们通常理解为存储特定用户会话所需的信息,这样,当用户在网站页面之间跳转时,存储的 SESSION 值不会丢失,而是在整个用户会话中一直存活下去。通俗一点讲,就是当用户A上网时,会创建一个ID(a)值进行保存下来,如果你的ID(A)值没有进行注销,下次上网时,这个网站还会记得你的ID(A)值,这个时候就可以在网上进行调用你的ID(A)值了,比如欢迎您ID(A)值再一次访问。

关于在 PHP 中应用 SESSION 值是很简单的,只要在顶端提前输入 session_start() 开始会话即可,下面就可以进行使用 SESSION 了,这只是小网站的应用方法,实际上,SESSION 自身还有许多属性,比如 SESSION周期,调用SESSION,SESSION数据有效期,SESSION保存,SESSION注销等等,如果有了这些属性,看起来才算是一个比较规范的SESSION应用会话。

下面是一个完整的 Session 类,整合了 Session 最基本的属性值,其中,打开,关闭与清理是符合php编程规范的,这也是一个很好的习惯。小小的说明一下,如果网站不是大量使用 Session 类,基本上就没必要使用 SESSION 类了。

  1. <?php
  2. /**
  3. * 文件描述 Session类
  4. * =================================================================
  5. * 文件名称 session.class.php
  6. * -----------------------------------------------------------------
  7. * 适用环境: PHP5.2.x / mysql 5.0.x
  8. * -----------------------------------------------------------------
  9. * 作 者 04ie。com
  10. * -----------------------------------------------------------------
  11. * 创建时间 2010-2-1
  12. * =================================================================
  13. */
  14. class Session
  15. {
  16. /**
  17. * session默认有效时间
  18. * @access public
  19. * @var ineger $_expiry
  20. */
  21. public $_expiry = 3600;
  22. /**
  23. * 有效域名
  24. * @access public
  25. * @var string $_domain
  26. */
  27. public $_domain = '.phpfamily.cn';
  28. //初始化
  29. public function __construct()
  30. {
  31. ini_set('session.use_trans_id', 0);
  32. ini_set('session.gc_maxlifetime', $this->_expiry);
  33. ini_set('session.use_cookie', 1);
  34. ini_set('session.cookie_path', '/');
  35. ini_set('session.cookie_domain', $this->_domain);
  36. session_module_name('user');
  37. session_set_save_handler(
  38. array(&$this, 'open'),
  39. array(&$this, 'close'),
  40. array(&$this, 'read'),
  41. array(&$this, 'write'),
  42. array(&$this, 'destroy'),
  43. array(&$this, 'gc')
  44. );
  45. session_start();
  46. }
  47. /**
  48. * 打开session
  49. * @access public
  50. * @param string $savePath
  51. * @param string $sName
  52. * @return true
  53. */
  54. public function open($savePath, $sName)
  55. {
  56. $this->_conn = mysql_connect('localhost', 'root', '');
  57. mysql_select_db('databases');
  58. mysql_query('SET NAMES "utf8"');
  59. return true;
  60. }
  61. /**
  62. * 关闭session
  63. * @access public
  64. * @return bool
  65. */
  66. public function close()
  67. {
  68. return mysql_close($this->_conn);
  69. }
  70. /**
  71. * 读取session
  72. * @access public
  73. * @param string $sid sessionID
  74. * @return mixed
  75. */
  76. public function read($sid)
  77. {
  78. $sql = "SELECT data FROM sessions WHERE session";
  79. $sql = sprintf($sql, $sid);
  80. $res = mysql_query($sql, $this->_conn);
  81. $row = mysql_fetch_assoc($res);
  82. return !$row ? null : $row['data'];
  83. }
  84. /**
  85. * 写入session
  86. * @access public
  87. * @param string $sid sessionID
  88. * @param string $data serialize序列化后的session内容
  89. * @return
  90. */
  91. public function write($sid, $data)
  92. {
  93. $expiry = time() + $this->_expiry;
  94. $sql = "REPLACE INTO sessions (sessionid,expiratio
  95. n,data) VALUES ('%s', '%d', '%s')";
  96. $sql = sprintf($sql, $sid, $expiry, $data);
  97. mysql_query($sql, $this->_conn);
  98. return true;
  99. }
  100. /**
  101. * 销毁session
  102. * @access public
  103. * @param string $sid sessionID
  104. * @return
  105. */
  106. public function destroy($sid)
  107. {
  108. $sql = "DELETE FROM sessions WHERE session";
  109. $sql = sprintf($sql, $sid);
  110. mysql_query($sql, $this->_conn);
  111. return true;
  112. }
  113. /**
  114. * 清理过期session
  115. * @access public
  116. * @param integer $time
  117. * @return
  118. */
  119. public function gc($time = 0)
  120. {
  121. $sql = "DELETE FROM sessions WHERE expiration < '%d'";
  122. $sql = sprintf($sql, time());
  123. mysql_query($sql, $this->_conn);
  124. mysql_query('OPTIMIZE TABLE sessions');
  125. return true;
  126. }