#19326 [Opn->Bgs]: Session data written twice

From: Date: Thu, 12 Sep 2002 11:47:40 +0000
Subject: #19326 [Opn->Bgs]: Session data written twice
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-19234@lists.php.net to get a copy of this message
ID: 19326 User updated by: vlads@krediidiinfo.ee -Summary: Sessio data written twice Reported By: vlads@krediidiinfo.ee -Status: Open +Status: Bogus Bug Type: Session related Operating System: RH Linux 7.1, kernel 2.4.9-34smp PHP Version: 4.2.3 New Comment: Problem is not in php, but in IE (6 and 6SP1) It makes two requests in a row and first request (the bogus one) will be aborted. Solution: I check the connection state first and when it is active I write the session data, otherwise I don't. My page contains <meta http-equiv="refrech"... Maybe thats why IE makes bogus request...don't know.. Previous Comments: ------------------------------------------------------------------------ [2002-09-10 02:11:31] vlads@krediidiinfo.ee Actually all MySQL database operations are made twice. It doesn't matter (except for performance and load) for select queries, but it has much todo with session data. First time my function writes the right session data and second time some of the session data gets lost (not always, but randomly). I tried to output written data to the screen in _write function and it differs sometimes from the data being read in _read function. It was very confusing, because the second thread does not output anything to the screen. So I started MySQL with --log parameter to see, what commands are sent to the database and saw, that 2 threads are reading and writing to the database. (thread 12 writes correct data and thread 11 wrong data, Although I am the only user in the system) Maybe it has something todo with 2 processor system? My theory is also backed up by GET_LOCK function. When I acquire lock in _write function, the second thread probably fails to write to the database and all session data gets written right. I use session class: <?php class Session { var $name; var $id; var $split_len; var $table_name; var $db_name; var $ttl; var $tmp_read; function Session($_session_name = 'SESSID', $_ttl = 900, $_use_cookies = 0, $_gc_percent = 1){ $this->name = $_session_name; $this->split_len = 256; $this->ttl = $_ttl; //default session time to live is 15 min -> 900 seconds. $this->table_name = 'session'; $this->db_name = 'user'; session_name($this->name); ini_set('session.use_cookies', $_use_cookies); ini_set('session.gc_probability', $_gc_percent); ini_set('session.use_trans_sid',0); @mysql_select_db($this->db_name); session_set_save_handler( array(&$this, "_sess_open"), array(&$this, "_sess_close"), array(&$this, "_sess_read"), array(&$this, "_sess_write"), array(&$this, "_sess_destroy"), array(&$this, "_sess_gc") ); session_start(); $this->id = session_id(); } function set_db($_db, $_table){ $this->db_name = $_db; $this->table_name = $_table; } function _sess_open($_spath, $_sname){ @mysql_select_db($this->db_name); return true; } function _sess_read($_id){ @mysql_select_db($this->db_name); $res = @mysql_query('SELECT data, UNIX_TIMESTAMP(changed) AS changed FROM '.$this->table_name.' WHERE name="'.$this->name.'" AND id="'.$_id.'" AND (UNIX_TIMESTAMP(changed)+'.$this->ttl.') >= '.time().' ORDER BY pos'); $ret_str = ''; while ($row = @mysql_fetch_object($res)) { $ret_str .= $row->data; } $ret_str = (string)base64_decode($ret_str); return (string)$ret_str; } function _sess_write($_id, $_data){ $_data = base64_encode($_data); @mysql_select_db($this->db_name); // mysql_query("SELECT GET_LOCK('".$_id."',120)"); @mysql_query('DELETE FROM '.$this->table_name.' WHERE name="'.$this->name.'" AND id="'.$_id.'"'); $pos = 0; while ($part = substr($_data, ($pos * $this->split_len), $this->split_len)) { mysql_query('INSERT INTO '.$this->table_name.'(id, name, pos, data) VALUES("'.$_id.'","'.$this->name.'",'.($pos++).',"'.$part.'")'); } //while return true; } function _sess_close(){ return true; } function _sess_destroy($_id){ @mysql_query('DELETE FROM '.$this->table_name.' WHERE name="'.$this->name.'" AND id="'.$_id.'"'); return true; } function _sess_gc($_max_lifetime){ @mysql_query('DELETE FROM '.$this->table_name.' WHERE name="'.$this->name.'" AND (UNIX_TIMESTAMP(changed)+'.$this->ttl.') < '.time()); return true; } } //class Session $sess = new Session('MUMM', 900, 0, 1); ?> MySQL log: 020907 22:04:02 11 Statistics 12 Connect suser@localhost on 11 Init DB user 11 Init DB user 11 Init DB user 11 Query SELECT data, UNIX_TIMESTAMP(changed) AS changed FROM session WHERE name="MUMM" AND id="ecb7cbefe334e74f55de53d5875136ef" AND (UNIX_TIMESTAMP(changed)+900) >= 1031429042 ORDER BY pos 11 Init DB user 11 Query SELECT md5 as md, txt_ee AS txt FROM i18n 12 Init DB user 12 Init DB user 12 Init DB user 12 Query SELECT data, UNIX_TIMESTAMP(changed) AS changed FROM session WHERE name="MUMM" AND id="ecb7cbefe334e74f55de53d5875136ef" AND (UNIX_TIMESTAMP(changed)+900) >= 1031429042 ORDER BY pos 12 Init DB user 12 Query SELECT md5 as md, txt_ee AS txt FROM i18n 12 Init DB user 12 Query DELETE FROM session WHERE name="MUMM" AND id="ecb7cbefe334e74f55de53d5875136ef" 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",0,"c2J5fHM6MjoiMTYiO3N3fHM6MDoiIjtldnxhOjE5OntzOjM6ImtleSI7czoyOiI3NiI7czo0OiJuaW1pIjtzOjk6IkVTVElLTyBBUyI7czo2OiJlcmVnbnIiO3M6ODoiMTAwMDAzNTYiO3M6MToidCI7czoxOiJKIjtzOjQ6ImFkZHIiO3M6MjA6IlNvb2xhIDggNTAxMDcgIFRhcnR1IjtzOjM6InRlbCI7czo5OiIwNy8zNzEwMDAiO3M6Mzoi") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",1,"ZmF4IjtzOjk6IjA3LzM3MTAxMCI7czo3OiJrYXBpdGFsIjtzOjE0OiI1OSA4NTAgNjYwIEVFSyI7czo0OiJtYWlsIjtzOjE2OiJlc3Rpa29AZXN0aWtvLmVlIjtzOjM6Ind3dyI7czoxMzoid3d3LmVzdGlrby5lZSI7czo2OiJhcmlyZWciO3M6Mjg6IjA5LjA0LjE5OTYgVGFydHUgxHJpcmVnaXN0ZXIiO3M6NDoidm9ybSI7czoxMToiQWt0") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",2,"c2lhc2VsdHMiO3M6MzoidGVnIjthOjI6e2k6MDtzOjQ3OiJJc2lrdWxlIGt1dWx1dmF0ZSBtaXR0ZWVsdXJ1dW1pZGUgduRsamH8/HJpbWluZSI7aToxO3M6NDY6Iktpbm5pc3ZhcmEgaGFsZHVzIHRhc3UgZWVzdCB29WkgbGVwaW5ndSBhbHVzZWwiO31zOjM6InJhcCI7YToxOntzOjE6IkUiO2E6MTp7aTowO2E6Mjp7aTowO3M6MTU6IjEw") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",3,"MDAwMzU2X0UuaHRtbCI7aToxO3M6MTA6IjI4LjA5LjIwMDAiO319fXM6MjoiYmsiO3M6MTA6IjI2LjA4LjIwMDIiO3M6MzoiYmlsIjthOjQ6e2k6MDtzOjM6IlMwMSI7aToxO3M6MzoiUzAwIjtpOjI7czozOiJTOTkiO2k6MztzOjM6IlM5OCI7fXM6NDoidmFsdiI7czowOiIiO3M6MjoibWgiO3M6MDoiIjtzOjM6Im1oYyI7aTowO31rbHxO") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",4,"O3J0aW1lfE47cGdnfGk6MDtjdGltZXxpOjEwMzE0Mjg2MjY7bWFzc3xhOjIyOntpOjE0O2E6Mjp7czoxOiJlIjtzOjg6IjEwMDc0NTI1IjtzOjE6Im4iO3M6MjU6IkEgJiBMIE1BTkFHRU1FTlQgRUVTVEkgQVMiO31pOjIxO2E6Mjp7czoxOiJlIjtzOjg6IjEwNTU5NTMwIjtzOjE6Im4iO3M6OToiQUFCRUxJIE/cIjt9aToyNjthOjI6e3M6") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",5,"MToiZSI7czo4OiIxMDA0NDAzMyI7czoxOiJuIjtzOjg6IkFMREVSIE/cIjt9aTozNzthOjI6e3M6MToiZSI7czo4OiIxMDQ1Nzg0MSI7czoxOiJuIjtzOjE1OiJBTUVSIFRPQkFDQ08gQVMiO31pOjQ4O2E6Mjp7czoxOiJlIjtzOjg6IjEwNzAxODczIjtzOjE6Im4iO3M6MjI6IkFVU1RSSUEgVEFCQUsgRUVTVEkgT9wiO31pOjYzO2E6Mjp7") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",6,"czoxOiJlIjtzOjg6IjEwMzEyMDgzIjtzOjE6Im4iO3M6MTg6IkNPRkZJSyAmIFBVRkZFVCBP3CI7fWk6NzY7YToyOntzOjE6ImUiO3M6ODoiMTAwMDAzNTYiO3M6MToibiI7czo5OiJFU1RJS08gQVMiO31pOjg2O2E6Mjp7czoxOiJlIjtzOjg6IjEwMzc2OTMwIjtzOjE6Im4iO3M6MjQ6IkhPVVNFIE9GIFBSSU5DRSBFRVNUSSBBUyI7fWk6") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",7,"OTQ7YToyOntzOjE6ImUiO3M6ODoiMTA4MTM5MDAiO3M6MToibiI7czoxMToiS0FSSVBMT04gT9wiO31pOjEwMTthOjI6e3M6MToiZSI7czo4OiIxMDI1NjEzNyI7czoxOiJuIjtzOjE1OiJLUkVESUlESUlORk8gQVMiO31pOjExMjthOjI6e3M6MToiZSI7czo4OiIxMDE5MzEwNiI7czoxOiJuIjtzOjE5OiJMT1NTSSBLSU5OSVNWQVJBIE/c") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",8,"Ijt9aToxMjc7YToyOntzOjE6ImUiO3M6ODoiMTA2NzUyNTkiO3M6MToibiI7czoxOToiTUVSSURJQU5VUyBERUxUQSBP3CI7fWk6MTMyO2E6Mjp7czoxOiJlIjtzOjg6IjEwNDUzNjA3IjtzOjE6Im4iO3M6MTQ6Ik1VTFRJTElOR1VBIEFTIjt9aToxNDU7YToyOntzOjE6ImUiO3M6ODoiMTAzOTcxMjIiO3M6MToibiI7czo2OiJPUk0gT9wi") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",9,"O31pOjE2MDthOjI6e3M6MToiZSI7czo4OiIxMDA3ODY4NyI7czoxOiJuIjtzOjg6IlJFTUVUIEFTIjt9aToxNzU7YToyOntzOjE6ImUiO3M6ODoiMTA1MjY3NzIiO3M6MToibiI7czoyNToiUkVWSVZBTCBTVk9SSVMgRVNUT05JQSBP3CI7fWk6MTg3O2E6Mjp7czoxOiJlIjtzOjg6IjEwNTg2ODczIjtzOjE6Im4iO3M6MTM6IlJFVklWQUxM") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",10,"LVYgT9wiO31pOjIwMDthOjI6e3M6MToiZSI7czo4OiIxMDA2Njg0NSI7czoxOiJuIjtzOjExOiJTRVJFTkRBTCBBUyI7fWk6MjEyO2E6Mjp7czoxOiJlIjtzOjg6IjEwODcyNDk3IjtzOjE6Im4iO3M6MTM6IlNLVlMgR1JVUFAgT9wiO31pOjIyMzthOjI6e3M6MToiZSI7czo4OiIxMDEwMDI0MCI7czoxOiJuIjtzOjEyOiJTWUxWRVNURVIg") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",11,"QVMiO31pOjIyOTthOjI6e3M6MToiZSI7czo4OiIxMDM4NzI3NiI7czoxOiJuIjtzOjE3OiJUUkFOU0ZFUiBHUlVQUCBP3CI7fWk6MjQyO2E6Mjp7czoxOiJlIjtzOjg6IjEwNzM1NDI5IjtzOjE6Im4iO3M6MTI6IlfVUk8gVkFSQSBP3CI7fX1hdXRofE86NDoiYXV0aCI6OTp7czo2OiJrbGllbnQiO2E6Nzp7czo0OiJuaW1pIjtzOjE0OiJW") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",12,"bGFkaW1pciBS/G50/CI7czoxMToia2xpZW5kaWtvb2QiO3M6MToiMSI7czoxMDoib25saW5la29vZCI7czo0OiIxODM0IjtzOjU6ImVtYWlsIjtzOjIxOiJ2bGFkc0BrcmVkaWlkaWluZm8uZWUiO3M6NjoidHVubnVzIjtzOjE6IksiO3M6NzoiYnJvd3NlciI7czo2OiJpZS5naWYiO3M6NjoiZXJlZ25yIjtzOjg6IjEwMjU2MTM3Ijt9czo3") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",13,"OiJrZXJlZ25yIjtOO3M6NToibG9naW4iO047czo3OiJpc19hdXRoIjtiOjE7czo0OiJfdHRsIjtpOjgwMDtzOjU6Il90aW1lIjtpOjEwMzE0MjkwNDI7czo4OiJpbmZvX3R4dCI7czowOiIiO3M6ODoibmV4dF9ybmQiO047czo4OiJsb2dpbl9pZCI7Tjt9aGlzdHxhOjU6e2k6MDthOjI6e3M6MToiZSI7czo4OiIxMDA3NDUyNSI7czoxOiJu") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",14,"IjtzOjI1OiJBICYgTCBNQU5BR0VNRU5UIEVFU1RJIEFTIjt9aToxO2E6Mjp7czoxOiJlIjtzOjg6IjEwMDAwMzU2IjtzOjE6Im4iO3M6OToiRVNUSUtPIEFTIjt9aToyO2E6Mjp7czoxOiJlIjtzOjg6IjEwNDU3ODQxIjtzOjE6Im4iO3M6MTU6IkFNRVIgVE9CQUNDTyBBUyI7fWk6MzthOjI6e3M6MToiZSI7czo4OiIxMDMxMjA4MyI7czox") 12 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",15,"OiJuIjtzOjE4OiJDT0ZGSUsgJiBQVUZGRVQgT9wiO31pOjQ7YToyOntzOjE6ImUiO3M6ODoiMTA4MTM5MDAiO3M6MToibiI7czoxMToiS0FSSVBMT04gT9wiO319aXZ8YTowOnt9") 12 Query ROLLBACK 11 Init DB user 11 Query DELETE FROM session WHERE name="MUMM" AND id="ecb7cbefe334e74f55de53d5875136ef" 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",0,"c2J5fGk6NTtzd3xzOjA6IiI7ZXZ8YToxOTp7czozOiJrZXkiO3M6MjoiNzYiO3M6NDoibmltaSI7czo5OiJFU1RJS08gQVMiO3M6NjoiZXJlZ25yIjtzOjg6IjEwMDAwMzU2IjtzOjE6InQiO3M6MToiSiI7czo0OiJhZGRyIjtzOjIwOiJTb29sYSA4IDUwMTA3ICBUYXJ0dSI7czozOiJ0ZWwiO3M6OToiMDcvMzcxMDAwIjtzOjM6ImZheCI7") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",1,"czo5OiIwNy8zNzEwMTAiO3M6Nzoia2FwaXRhbCI7czoxNDoiNTkgODUwIDY2MCBFRUsiO3M6NDoibWFpbCI7czoxNjoiZXN0aWtvQGVzdGlrby5lZSI7czozOiJ3d3ciO3M6MTM6Ind3dy5lc3Rpa28uZWUiO3M6NjoiYXJpcmVnIjtzOjI4OiIwOS4wNC4xOTk2IFRhcnR1IMRyaXJlZ2lzdGVyIjtzOjQ6InZvcm0iO3M6MTE6IkFrdHNpYXNl") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",2,"bHRzIjtzOjM6InRlZyI7YToyOntpOjA7czo0NzoiSXNpa3VsZSBrdXVsdXZhdGUgbWl0dGVlbHVydXVtaWRlIHbkbGph/PxyaW1pbmUiO2k6MTtzOjQ2OiJLaW5uaXN2YXJhIGhhbGR1cyB0YXN1IGVlc3QgdvVpIGxlcGluZ3UgYWx1c2VsIjt9czozOiJyYXAiO2E6MTp7czoxOiJFIjthOjE6e2k6MDthOjI6e2k6MDtzOjE1OiIxMDAwMDM1") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",3,"Nl9FLmh0bWwiO2k6MTtzOjEwOiIyOC4wOS4yMDAwIjt9fX1zOjI6ImJrIjtzOjEwOiIyNi4wOC4yMDAyIjtzOjM6ImJpbCI7YTo0OntpOjA7czozOiJTMDEiO2k6MTtzOjM6IlMwMCI7aToyO3M6MzoiUzk5IjtpOjM7czozOiJTOTgiO31zOjQ6InZhbHYiO3M6MDoiIjtzOjI6Im1oIjtzOjA6IiI7czozOiJtaGMiO2k6MDt9a2x8TjtydGlt") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",4,"ZXxOO3BnZ3xpOjA7Y3RpbWV8aToxMDMxNDI4NjI2O21hc3N8YTowOnt9YXV0aHxPOjQ6ImF1dGgiOjk6e3M6Njoia2xpZW50IjthOjc6e3M6NDoibmltaSI7czoxNDoiVmxhZGltaXIgUvxudPwiO3M6MTE6ImtsaWVuZGlrb29kIjtzOjE6IjEiO3M6MTA6Im9ubGluZWtvb2QiO3M6NDoiMTgzNCI7czo1OiJlbWFpbCI7czoyMToidmxhZHNA") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",5,"a3JlZGlpZGlpbmZvLmVlIjtzOjY6InR1bm51cyI7czoxOiJLIjtzOjc6ImJyb3dzZXIiO3M6NjoiaWUuZ2lmIjtzOjY6ImVyZWduciI7czo4OiIxMDI1NjEzNyI7fXM6Nzoia2VyZWduciI7TjtzOjU6ImxvZ2luIjtOO3M6NzoiaXNfYXV0aCI7YjoxO3M6NDoiX3R0bCI7aTo4MDA7czo1OiJfdGltZSI7aToxMDMxNDI5MDQyO3M6ODoiaW5m") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",6,"b190eHQiO3M6MDoiIjtzOjg6Im5leHRfcm5kIjtOO3M6ODoibG9naW5faWQiO047fWhpc3R8YTo1OntpOjA7YToyOntzOjE6ImUiO3M6ODoiMTAwNzQ1MjUiO3M6MToibiI7czoyNToiQSAmIEwgTUFOQUdFTUVOVCBFRVNUSSBBUyI7fWk6MTthOjI6e3M6MToiZSI7czo4OiIxMDAwMDM1NiI7czoxOiJuIjtzOjk6IkVTVElLTyBBUyI7fWk6") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",7,"MjthOjI6e3M6MToiZSI7czo4OiIxMDQ1Nzg0MSI7czoxOiJuIjtzOjE1OiJBTUVSIFRPQkFDQ08gQVMiO31pOjM7YToyOntzOjE6ImUiO3M6ODoiMTAzMTIwODMiO3M6MToibiI7czoxODoiQ09GRklLICYgUFVGRkVUIE/cIjt9aTo0O2E6Mjp7czoxOiJlIjtzOjg6IjEwODEzOTAwIjtzOjE6Im4iO3M6MTE6IktBUklQTE9OIE/cIjt9fWl2") 11 Query INSERT INTO session(id, name, pos, data) VALUES("ecb7cbefe334e74f55de53d5875136ef","MUMM",8,"fGE6MDp7fQ==") 11 Query ROLLBACK 11 Quit ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=19326&edit=1

« previous php.bugs (#19234) next »