Kom ihåg mig?
Home Menu

Menu


Php session management med mysql

 
Ämnesverktyg Visningsalternativ
Oläst 2008-12-12, 18:45 #1
Mr Bond91 Mr Bond91 är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2008
Inlägg: 7
Mr Bond91 Mr Bond91 är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2008
Inlägg: 7
Hej! När jag kör detta scriptet från php.net så räknar den inte +1 utan +2. Den verkar köra scriptet två ggr. Detta blir väldigt jobbigt när det sparas rader i mysql, till exempel så sparas två rader istället för en rad med samma innehåll.

Varför räknar den med plus 2 istället för plus 1 med session räknaren längst ner i scriptet???


Kod:
<?php

/*
CREATE TABLE IF NOT EXISTS `sessions` (
 `session` varchar(255) character set utf8 collate utf8_bin NOT NULL,
 `session_expires` int(10) unsigned NOT NULL default '0',
 `session_data` text collate utf8_unicode_ci,
 PRIMARY KEY (`session`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/

/**
 * PHP session handling with MySQL-DB
 *
 * Created on 12.03.2008
 * @license  http://www.opensource.org/licenses/cpl.php Common Public License 1.0
 */

class Session
{
  /**
   * a database connection resource
   * @var resource
   */
  private static $_sess_db;

  /**
   * Open the session
   * @return bool
   */
  public static function open() {
    
    if (self::$_sess_db = mysql_connect('localhost',
                      'root',
                      '')) {
      return mysql_select_db('a0938700_db1', self::$_sess_db);
    }
    return false;
  }

  /**
   * Close the session
   * @return bool
   */
  public static function close() {
    return mysql_close(self::$_sess_db);
  }

  /**
   * Read the session
   * @param int session id
   * @return string string of the sessoin
   */
  public static function read($id) {
    $id = mysql_real_escape_string($id);
    $sql = sprintf("SELECT `session_data` FROM `sessions` " .
            "WHERE `session` = '%s'", $id);
    if ($result = mysql_query($sql, self::$_sess_db)) {
      if (mysql_num_rows($result)) {
        $record = mysql_fetch_assoc($result);
        return $record['session_data'];
      }
    }
    return '';
  }

  /**
   * Write the session
   * @param int session id
   * @param string data of the session
   */

  public static function write($id, $data) {
    $sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')",
            mysql_real_escape_string($id),
            mysql_real_escape_string(time()),
            mysql_real_escape_string($data)
            );
    return mysql_query($sql, self::$_sess_db);
  }

  /**
   * Destroy the session
   * @param int session id
   * @return bool
   */
  public static function destroy($id) {
    $sql = sprintf("DELETE FROM `sessions` WHERE `session` = '%s'", $id);
    return mysql_query($sql, self::$_sess_db);
  }

  /**
   * Garbage Collector
   * @param int life time (sec.)
   * @return bool
   * @see session.gc_divisor   100
   * @see session.gc_maxlifetime 1440
   * @see session.gc_probability  1
   * @usage execution rate 1/100
   *    (session.gc_probability/session.gc_divisor)
   */
  public static function gc($max) {
    $sql = sprintf("DELETE FROM `sessions` WHERE `session_expires` < '%s'",
            mysql_real_escape_string(time() - $max));
    return mysql_query($sql, self::$_sess_db);
  }
}

//ini_set('session.gc_probability', 50);
ini_set('session.save_handler', 'user');

session_set_save_handler(array('Session', 'open'),
             array('Session', 'close'),
             array('Session', 'read'),
             array('Session', 'write'),
             array('Session', 'destroy'),
             array('Session', 'gc')
             );


session_start();

if (isset($_SESSION['counter'])) {
  $_SESSION['counter']++;       // Här lägger den till 2 vid en refresh
} else {
  $_SESSION['counter'] = 1;
}
echo $_SESSION['counter'];

?>
Tacksam för svar!

/ Jim
Mr Bond91 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 23:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017