sessiondemo.py (5337B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\sessiondemo.py 2 import calendar 3 from datetime import datetime 4 import sys 5 import cherrypy 6 from cherrypy.lib import sessions 7 from cherrypy._cpcompat import copyitems 8 page = '\n<html>\n<head>\n<style type=\'text/css\'>\ntable { border-collapse: collapse; border: 1px solid #663333; }\nth { text-align: right; background-color: #663333; color: white; padding: 0.5em; }\ntd { white-space: pre-wrap; font-family: monospace; padding: 0.5em; \n border: 1px solid #663333; }\n.warn { font-family: serif; color: #990000; }\n</style>\n<script type="text/javascript">\n<!--\nfunction twodigit(d) { return d < 10 ? "0" + d : d; }\nfunction formattime(t) {\n var month = t.getUTCMonth() + 1;\n var day = t.getUTCDate();\n var year = t.getUTCFullYear();\n var hours = t.getUTCHours();\n var minutes = t.getUTCMinutes();\n return (year + "/" + twodigit(month) + "/" + twodigit(day) + " " +\n hours + ":" + twodigit(minutes) + " UTC");\n}\n\nfunction interval(s) {\n // Return the given interval (in seconds) as an English phrase\n var seconds = s %% 60;\n s = Math.floor(s / 60);\n var minutes = s %% 60;\n s = Math.floor(s / 60);\n var hours = s %% 24;\n var v = twodigit(hours) + ":" + twodigit(minutes) + ":" + twodigit(seconds);\n var days = Math.floor(s / 24);\n if (days != 0) v = days + \' days, \' + v;\n return v;\n}\n\nvar fudge_seconds = 5;\n\nfunction init() {\n // Set the content of the \'btime\' cell.\n var currentTime = new Date();\n var bunixtime = Math.floor(currentTime.getTime() / 1000);\n \n var v = formattime(currentTime);\n v += " (Unix time: " + bunixtime + ")";\n \n var diff = Math.abs(%(serverunixtime)s - bunixtime);\n if (diff > fudge_seconds) v += "<p class=\'warn\'>Browser and Server times disagree.</p>";\n \n document.getElementById(\'btime\').innerHTML = v;\n \n // Warn if response cookie expires is not close to one hour in the future.\n // Yes, we want this to happen when wit hit the \'Expire\' link, too.\n var expires = Date.parse("%(expires)s") / 1000;\n var onehour = (60 * 60);\n if (Math.abs(expires - (bunixtime + onehour)) > fudge_seconds) {\n diff = Math.floor(expires - bunixtime);\n if (expires > (bunixtime + onehour)) {\n var msg = "Response cookie \'expires\' date is " + interval(diff) + " in the future.";\n } else {\n var msg = "Response cookie \'expires\' date is " + interval(0 - diff) + " in the past.";\n }\n document.getElementById(\'respcookiewarn\').innerHTML = msg;\n }\n}\n//-->\n</script>\n</head>\n\n<body onload=\'init()\'>\n<h2>Session Demo</h2>\n<p>Reload this page. The session ID should not change from one reload to the next</p>\n<p><a href=\'../\'>Index</a> | <a href=\'expire\'>Expire</a> | <a href=\'regen\'>Regenerate</a></p>\n<table>\n <tr><th>Session ID:</th><td>%(sessionid)s<p class=\'warn\'>%(changemsg)s</p></td></tr>\n <tr><th>Request Cookie</th><td>%(reqcookie)s</td></tr>\n <tr><th>Response Cookie</th><td>%(respcookie)s<p id=\'respcookiewarn\' class=\'warn\'></p></td></tr>\n <tr><th>Session Data</th><td>%(sessiondata)s</td></tr>\n <tr><th>Server Time</th><td id=\'stime\'>%(servertime)s (Unix time: %(serverunixtime)s)</td></tr>\n <tr><th>Browser Time</th><td id=\'btime\'> </td></tr>\n <tr><th>Cherrypy Version:</th><td>%(cpversion)s</td></tr>\n <tr><th>Python Version:</th><td>%(pyversion)s</td></tr>\n</table>\n</body></html>\n' 9 10 class Root(object): 11 12 def page(self): 13 changemsg = [] 14 if cherrypy.session.id != cherrypy.session.originalid: 15 if cherrypy.session.originalid is None: 16 changemsg.append('Created new session because no session id was given.') 17 if cherrypy.session.missing: 18 changemsg.append('Created new session due to missing (expired or malicious) session.') 19 if cherrypy.session.regenerated: 20 changemsg.append('Application generated a new session.') 21 try: 22 expires = cherrypy.response.cookie['session_id']['expires'] 23 except KeyError: 24 expires = '' 25 26 return page % {'sessionid': cherrypy.session.id, 27 'changemsg': '<br>'.join(changemsg), 28 'respcookie': cherrypy.response.cookie.output(), 29 'reqcookie': cherrypy.request.cookie.output(), 30 'sessiondata': copyitems(cherrypy.session), 31 'servertime': datetime.utcnow().strftime('%Y/%m/%d %H:%M') + ' UTC', 32 'serverunixtime': calendar.timegm(datetime.utcnow().timetuple()), 33 'cpversion': cherrypy.__version__, 34 'pyversion': sys.version, 35 'expires': expires} 36 37 def index(self): 38 cherrypy.session['color'] = 'green' 39 return self.page() 40 41 index.exposed = True 42 43 def expire(self): 44 sessions.expire() 45 return self.page() 46 47 expire.exposed = True 48 49 def regen(self): 50 cherrypy.session.regenerate() 51 cherrypy.session['color'] = 'yellow' 52 return self.page() 53 54 regen.exposed = True 55 56 57 if __name__ == '__main__': 58 cherrypy.config.update({'log.screen': True, 59 'tools.sessions.on': True}) 60 cherrypy.quickstart(Root())