【问题标题】:Session variables like PHP in Python会话变量,如 Python 中的 PHP
【发布时间】:2013-09-02 00:36:14
【问题描述】:

我正在用 python 制作一个 web 应用程序,我想为会话保存一些变量,直到浏览器关闭,就像我用 PHP 做的那样:

<?php
session_start(); 
$_SESSION['size']='small'; 
?>

什么是简单又安全的方法?

我同时使用 lighttpd 和 apache,所以我想要一些可以同时使用的东西。

我也会保存密码,所以我需要一些安全的东西。

【问题讨论】:

  • 有什么理由使用 cgi 而不是一些轻量级框架?
  • 喜欢 web.py?我想用纯代码来做。我不想使用框架(主要是为了学习)。
  • CGI 不是编写纯 Python Web 应用程序的方法。你应该使用 wsgi。
  • 另外,您应该记住 php 是为 Web 设计的语言,因此包括会话处理等内容。 Python 是一种通用语言:对于会话,您需要第三方库。

标签: python session cgi


【解决方案1】:

在 PHP 中使用 session_start() 时,你也不是在使用“纯代码”,它也是雾里看花......

忽略所有注意事项:您可以做的是使用全局字典来存储会话数据。一旦客户端发出请求并传递“会话”-cookie,您就可以在该字典中查找所有会话数据。如果没有条目或客户端没有 session-cookie,则创建一个新会话并将 cookie 传递给客户端。 session-cookie 是由一个随机的,比如 16 个字符的字符串组成的。由于密钥空间太大,其他客户端无法猜测其他用户的会话。有时,您会从服务器有一段时间未见的会话中删除字典。

不过,您真的应该在 CherryPy 的有关使用会话的文档中 take a look

【讨论】:

  • 此链接现已损坏。不过,它已经很旧了。
【解决方案2】:

我决定用 cookie 来做这件事,这样更容易/更安全。以下是所有感兴趣的人的代码:

# importing the libs
from http import cookies
import os

# setting the cookies
C = cookies.SimpleCookie()
C["cookie1"] = "some_text"
C["cookie2"] = "another_text"
print(C.output())

# sending the html header
print('Content-type: text/html;\n')

# reading the "cookie1" cookie
cookievalue = cookies.SimpleCookie(os.environ["HTTP_COOKIE"])
print (cookievalue["cookie1"].value)

【讨论】:

  • 请注意,您在这样做时可能会受到无数可能的攻击、怪癖和错误,首先是客户可能会修改/提出并发送他喜欢的任何内容作为 cookie[12]
  • 除了用户名/密码cookies之外,还会有一个带有随机字符串的cookie用于验证,这将显示X用户在那个时间从X ip连接并且如果其他人试图窃取他的cookie 将无法访问。这也将保存在服务器上的本地文件中,以进行客户端-服务器验证。使用这种方法,攻击者甚至无法访问后端服务器。登录表单上也会有一个 max-tries,所以如果有人试图滥用它试图进入,他将被阻止。安全第一。
  • 除其他外,这仅在人们从大型 NAT(似乎每个人都来自相同的源 IP)或移动设备(相同的用户似乎来自不同的 IP)连接时才会部分起作用。跨度>
猜你喜欢
  • 2012-08-03
  • 2013-05-01
  • 2011-06-09
  • 2021-09-02
  • 2012-05-18
  • 2011-07-05
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多