{"id":5283,"date":"2013-05-08T11:59:27","date_gmt":"2013-05-08T15:59:27","guid":{"rendered":"https:\/\/www.caskeys.com\/dc\/?p=5283"},"modified":"2017-01-15T15:21:58","modified_gmt":"2017-01-15T20:21:58","slug":"class-sessions","status":"publish","type":"post","link":"https:\/\/www.caskeys.com\/dc\/class-sessions\/","title":{"rendered":"Class &#8211; Sessions"},"content":{"rendered":"<pre class=\"brush: php; title: Code:; notranslate\" title=\"Code:\">\r\n&lt;?php\r\n\r\nclass class_sessions implements SessionHandlerInterface\r\n{    \r\n\r\n\t\/*\r\n\tclass_sessions\r\n\tDamon Vaughn Caskey\r\n\t2012_12_10\r\n\t\r\n\tOverride PHP's default session handling to store data in an MSSQL table. \r\n\t*\/\t\r\n\t\r\n\tconst \tc_iLife \t= 1440;\t\/\/Default session time out (in seconds)\r\n\t\r\n\tprivate\t$oDB \t\t= NULL;\t\/\/Databse class object.\r\n\tprivate $iLife\t\t= NULL;\t\/\/Session time out.\r\n\r\n\tfunction __construct($oDep, $iLife=self::c_iLife)\r\n\t{\r\n\t\t\/*\r\n\t\tConstructor\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_29\r\n\t\t\r\n\t\tClass constructor.\r\n\t\t*\/\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\/* Set class vars. *\/\r\n\t\t$this-&gt;iLife = $iLife;\t\/\/Session time out.\r\n\t\t\r\n\t\t\/* Import object dependencies. *\/\r\n\t\t$this-&gt;oDB = $oDep&#x5B;'DB'];\r\n\t\t\t\t\r\n\t\t\/* Verify object dependencies. *\/\r\n\t\tif(!$this-&gt;oDB)\ttrigger_error(&quot;Missing object dependency: Database.&quot;, E_USER_ERROR);\t\t\r\n\t}\r\n      \r\n   \tpublic function session_set($cID, $cValue=NULL)\r\n\t{\r\n\t\t\/*\r\n\t\tsession_set\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_23\r\n\t\t\r\n\t\tWrapper to set value of a $_SESSION&#x5B;] variable.\r\n\t\t\r\n\t\t$cID:\t\tSession variable name\/id.\r\n\t\t$cValue:\tValue to set.\r\n\t\t*\/\r\n\t\t\r\n\t\t$_SESSION&#x5B;$cID] = $cValue;\r\n\t}\r\n\t\r\n\tpublic function session_get($cID)\r\n\t{\r\n\t\t\/*\r\n\t\tsession_get\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_23\r\n\t\t\r\n\t\tWrapper to aquire value in a $_SESSION&#x5B;] variable.\r\n\t\t\r\n\t\t$cID:\tSession variable name\/id.\r\n\t\t*\/\r\n\t\t\r\n\t\t$cValue\t= NULL;\t\/\/Value to return.\r\n\t\t\r\n\t\t\/* Get session value if any *\/\r\n\t\tif(isset($_SESSION&#x5B;$cID]))\r\n\t\t{\r\n\t\t\t$cValue = $_SESSION&#x5B;$cID];\r\n\t\t}\t\r\n\t\t\r\n\t\t\/* Return value. *\/\r\n\t\treturn $cValue;\r\n\t}\t\r\n   \r\n   \tpublic function open($savePath, $sessionName)\r\n    {\t\r\n\t\t\/*\r\n\t\topen\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tSet database class object for other session functions. Called by PHP to open session.\r\n\t\t\r\n\t\t$savePath: \t\tPath to locate session file. Unused.\r\n\t\t$sessionName:\tName of session file. Unused.\r\n\t\t*\/\r\n\t\t\t\t\t\r\n\t\t\/* Return TRUE. *\/\r\n        return true;\r\n    }\r\n\r\n    public function close()\r\n    {\t\r\n\t\t\/*\r\n\t\tclose\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tFiller; function is called by PHP to close session.\r\n\t\t*\/\t\t\t\r\n\t\t\r\n\t\t\/* Return TRUE. *\/\r\n        return true;\r\n    }\r\n\r\n    public function read($cID)\r\n    {\t\t\r\n        \/*\r\n\t\tread\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tLocate and read session data from database.\r\n\t\t\r\n\t\t$cID = Session ID.\r\n\t\t*\/\r\n\t\r\n\t\t$cData \t\t= NULL; \t\t\t\t\t\t\/\/Final output.\r\n\t\t$cQuery \t= NULL;\t\t\t\t\t\t\t\/\/Query string.\r\n\t\t$cTime \t\t= date(constants::c_cDateF);\t\/\/Current time.\r\n\t\t$cParams\t= NULL;\t\t\t\t\t\t\t\/\/Parameter array.\t\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\/* Build query string. *\/\r\n\t\t$cQuery = &quot;SELECT session_data \r\n\t\t\t\t\tFROM tbl_php_sessions \r\n\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\tsession_id = ? \r\n\t\t\t\t\t\tAND \r\n\t\t\t\t\t\t\texpire &gt; ?&quot;;\r\n\t\t\r\n\t\t\/* Apply parameters. *\/\r\n\t\t$cParams = array(&amp;$cID, &amp;$cTime); \r\n\t\t\r\n\t\t\/* Execute query. *\/\t\r\n\t\t$this-&gt;oDB-&gt;db_basic_select($cQuery, $cParams);\r\n\t\t\t\t\t\t\r\n\t\t\/* Get result and pass to local var(s). *\/\r\n\t\tif($this-&gt;oDB-&gt;rDBResult)\r\n\t\t{\r\n\t\t\t\/* Set line array. *\/\r\n\t\t\t$this-&gt;oDB-&gt;db_line();\r\n\t\t\t\r\n\t\t\t\/* Get session data. *\/\r\n\t\t\t$cData = $this-&gt;oDB-&gt;cDBLine&#x5B;'session_data'];\r\n\t\t}\t\r\n\t\t\r\n\t\t\/* Return results. *\/\r\n\t\treturn $cData;\r\n    }\r\n\r\n    public function write($cID, $cData)\r\n    {\r\n\t\t\/*\r\n\t\twrite\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tUpdate or insert session data. Note that only ID, Expire, and Session Data are \r\n\t\trequired. Other data is to aid in debugging.\r\n\t\t\r\n\t\t$cID \t= Session ID.\r\n\t\t$cData\t= Session data.\r\n\t\t*\/\r\n\t\t\r\n\t\t$cQuery = NULL;\t               \t\t\/\/Query string.\r\n\t\t$cTime \t= NULL;\t\t\t\t\t\t\/\/Current time.\r\n\t\t$cLoc\t= $_SERVER&#x5B;&quot;PHP_SELF&quot;];\t\t\/\/Current file.\r\n\t\t$cIP\t= $_SERVER&#x5B;'REMOTE_ADDR'];\t\/\/Client IP address.\r\n\t\t\t\t\t\r\n\t\t\/* Calculate epirire time. *\/\r\n\t\t$cTime\t\t= date(constants::c_cDateF, time()+$this-&gt;iLife);\t\r\n\t\t\r\n\t\t\/* Ensure IP string is &lt;= 15. Anything over is a MAC or unexpected (and useless) value. *\/\r\n\t\t$cIP = substr($cIP, 0, 15);\r\n\t\t\r\n\t\t\/* Build query string. *\/\r\n\t\t$cQuery =&quot;MERGE INTO tbl_php_sessions\r\n\t\tUSING \r\n\t\t\t(SELECT ? AS Search_Col) AS SRC\r\n\t\tON \r\n\t\t\ttbl_php_sessions.session_id = SRC.Search_Col\r\n\t\tWHEN MATCHED THEN\r\n\t\t\tUPDATE SET\r\n\t\t\t\tsession_data\t= ?,\r\n\t\t\t\texpire\t\t\t= ?,\r\n\t\t\t\tsource\t\t\t= ?,\r\n\t\t\t\tip\t\t\t\t= ?\r\n\t\tWHEN NOT MATCHED THEN\r\n\t\t\tINSERT (session_id, session_data, expire, source, ip)\r\n\t\t\tVALUES (SRC.Search_Col, ?, ?, ?, ?);&quot;;\t\t\r\n\t\t\r\n\t\t\/* Apply parameters. *\/\r\n\t\t$cParams = array(&amp;$cID,\r\n\t\t\t\t&amp;$cData,\r\n\t\t\t\t&amp;$cTime,\r\n\t\t\t\t&amp;$cLoc,\r\n\t\t\t\t&amp;$cIP,\r\n\t\t\t\t&amp;$cData,\t\t\t\t\r\n\t\t\t\t&amp;$cTime,\r\n\t\t\t\t&amp;$cLoc,\r\n\t\t\t\t&amp;$cIP);\t\r\n\t\t\r\n\t\t\/* Execute query. *\/\t\r\n\t\t$this-&gt;oDB-&gt;db_basic_action($cQuery, $cParams);\r\n\t\t\r\n\t\t\/* Return TRUE. *\/\r\n\t\treturn true;\r\n    }\r\n\r\n    public function destroy($cID)\r\n    {\t\r\n\t\r\n\t\t\/*\r\n\t\tdestroy\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tDelete current session.\r\n\t\t\r\n\t\t$cID: Session ID.\t\t \r\n\t\t*\/\r\n\t\t\t\t\r\n\t\t$cQuery \t= NULL;\t\/\/Query string.\r\n\t\t$cParams\t= NULL;\t\/\/Parameter array.\r\n\t\t\r\n\t\t\/* Build query string. *\/\r\n\t\t$cQuery\t\t= &quot;DELETE FROM tbl_php_sessions WHERE session_id = ?&quot;;\r\n\t\t\r\n\t\t\/* Apply parameters. *\/\r\n\t\t$cParams\t= array(&amp;$cID);\r\n\t\t\r\n\t\t\/* Execute query. *\/\t\r\n\t\t$this-&gt;oDB-&gt;db_basic_action($cQuery, $cParams);\t\t\r\n\t\t\r\n\t\t\/* Return TRUE. *\/\r\n\t\treturn true;\r\n    }\r\n\r\n    public function gc($maxlifetime)\r\n    {\r\n\t\t\/*\r\n\t\tgc (Garbage Cleanup)\r\n\t\tDamon Vaughn Caskey\r\n\t\t2012_12_10\r\n\t\t\r\n\t\tDelete expired session data.\r\n\t\t\r\n\t\t$maxlifetime: Expire time. Unused. \r\n\t\t*\/\r\n\t\t\r\n\t\t$cTime\t\t= date(constants::c_cDateF);\t\/\/Current time.\t\r\n\t\t$cQuery\t\t= NULL;\t\t\t\t\t\t\t\/\/Query string.\r\n\t\t$cParams \t= NULL;\t\t\t\t\t\t\t\/\/Parameter array.\r\n\t\t\r\n\t\t\/* Build query string. *\/\r\n\t\t$cQuery\t\t= &quot;DELETE FROM tbl_php_sessions WHERE expire &lt; ?&quot;;\r\n\t\t\r\n\t\t\/* Apply parameters. *\/\r\n\t\t$cParams\t= array(&amp;$cTime);\r\n\r\n\t\t\/* Execute query. *\/\t\r\n\t\t$this-&gt;oDB-&gt;db_basic_action($cQuery, $cParams);\r\n\t\r\n\t\t\/* Return TRUE. *\/\r\n\t\treturn true;\r\n    }\r\n}\r\n\r\n\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Sessions class.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[71],"tags":[27,234],"class_list":["post-5283","post","type-post","status-publish","format-standard","hentry","category-technology-temerity","tag-coding","tag-coding-php"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5lNM5-1nd","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/posts\/5283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/comments?post=5283"}],"version-history":[{"count":4,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/posts\/5283\/revisions"}],"predecessor-version":[{"id":6183,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/posts\/5283\/revisions\/6183"}],"wp:attachment":[{"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/media?parent=5283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/categories?post=5283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.caskeys.com\/dc\/wp-json\/wp\/v2\/tags?post=5283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}