NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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\'>&nbsp;</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())