|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-09-12 06:47 UTC] vlads at krediidiinfo dot ee
[2002-09-12 11:09 UTC] sniper@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2026 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 07 15:00:01 2026 UTC |
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