FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Nykomling
|
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']; ?> / Jim |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Nykomling
|
Vad jag kan se så räknar den bara +1 ? Likväl när jag testar scriptet.
Inkluderar du filen från ett annat script? Kontrollera att kolumnen session verkligen är primär nyckel i MySQLn i fall du får fler än en entry i databasen (förutsatt att de har samma session id). |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Tack för ditt svar.
Jag inkluderar filen. Men det blir samma som när jag bara kör filen direkt. En annan sak jag märkte nu var att om jag istället har det inställt så att sessionerna sparas som vanliga filer och bara kör kodsnutten 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']; så räknar den + 2 ändå. Fattar inte alls varför. Men om jag trycker på refresh Jättesnabbt så den inte hinner ladda klart scriptet så ser jag att den ibland bara kör +1. Kan det vara någon inställning? Det är precis som om det körs två ggr av någon dum anledning. |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Medlem
|
Kör du med Firebug, i så fall vilken version?
|
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Nykomling
|
Kan vara klokt som Holger är inne på att kanske testa med en annan browser eller låta någon annan se om de får samma respons.
Verkar ju inte vara något fel på koden i övrigt. |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Nykomling
|
Jag har firebug 1.2.1
Testade i IE 7. Där visas det korrekt. Då är det alltså i firefox det blir fel, har ni någon aning om vad? |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Nykomling
|
Stängde av Yslow som tillhör firebug. Då fungerade det perfekt
![]() Tack så mycket för hjälpen! |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Det kan vara farlig med extensions i FF, det värsta jag råkat ut för var en extension som pga en bugg skapade en DoS-attack mot vissa websidor som man besökte...
|
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Har WN som tidsfördriv
|
Citat:
|
|||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Nykomling
|
Jag märkte en annan sak nu när jag testade det med include osv. Nu räknar den tre i taget. Läste någonstans att det var pga antalet requests och att den räknade för varje gång. Om detta nu stämmer, hur kommer jag runt det? Det som egentligen ska köras är en INSERT, som då lägger till 3 rader istället för en. Finns det något sätt att fixa detta?
Tack för svaren ![]() |
||
![]() |
![]() |
Svara |
|
|