Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL如何使用单个用户而不是所有用户_Python_Sql_Database_Sockets - Fatal编程技术网

Python SQL如何使用单个用户而不是所有用户

Python SQL如何使用单个用户而不是所有用户,python,sql,database,sockets,Python,Sql,Database,Sockets,所以我用用户名和密码创建了一个基本的SQL表,我注册了,一切都很顺利。现在让我明确一点,如果你没有登录,除了登录和注册之外,你根本无法访问该网站。我有一个名为“”onlineORoffline“的列,当用户连接到服务器时,该列将联机,但当我执行该语句时 status = user_info[5] #user_info[5] is rather he is online or not if status == 'online':.. 如果他在线,他可以访问该网站,但问题是任何人都可以访问该网站

所以我用用户名和密码创建了一个基本的SQL表,我注册了,一切都很顺利。现在让我明确一点,如果你没有登录,除了登录和注册之外,你根本无法访问该网站。我有一个名为“
”onlineORoffline“
的列,当用户连接到服务器时,该列将联机,但当我执行该语句时

status = user_info[5] #user_info[5] is rather he is online or not
 if status == 'online':..

如果他在线,他可以访问该网站,但问题是任何人都可以访问该网站,不仅是刚刚登录的用户,而且是因为他在线而访问该网站的所有人,因此在用户注销该网站之前,此声明是真实的。那么我该怎么做才能使它只适用于他,而不是所有登录服务器的人(对于后端,我使用的是python套接字)。我是在python上做这件事的,有没有一种方法我只能与登录的单个客户端一起工作?

您可以找到许多关于设置服务器身份验证系统的教程,但这里有一个简短的答案。对于生产使用而不是学习,更好的答案通常是使用已经过其他人测试的现有库或框架

不要在数据库中设置“在线”,而是生成某种类型的唯一值。(一种快速且可能不太安全的方法:当前服务器时间的md5哈希+用户ID+一些秘密)

将该值与用户ID一起设置为用户浏览器中的cookie

将该值存储为数据库中的当前会话字段

检查浏览器是否设置了用户ID和会话cookie,而不是检查数据库中的“联机”。在数据库中查找用户ID的当前会话ID,并查看它们是否匹配。如果没有,则显示“会话已过期”和登录页面

SQL注入:清理输入并使用存储过程或安全库,以防止“小Bobby表”将命令塞入ID或会话cookie

更多详情:

如果浏览器转到您的页面,它将具有以下内容之一:

  • 没有cookies:只显示登录页面
  • 用户ID cookie,会话ID cookie:验证,如果有效,则视为已登录
当用户登录时,您可以设置用户ID和会话ID cookie并更新数据库。由于这是您唯一一次设置会话ID cookie,因此不会有其他人或浏览器同时登录

验证:

要进行验证,可以使用用户ID和会话ID执行安全选择或存储过程

如果(SessionID==会话ID cookie),则它们已登录。要保护的每个页面都需要检查此项

数据库

UserID  UserNmae  SessionID
1234    Fred      1234abcd1234abcd...
1235    Barney    null
1236    Wilma     7fe0320a....
每次用户成功登录时,SessionID都会更改,因为服务器会生成一个新值,并将其存储到数据库和响应页面的标题中,以便成功登录

因此,如果Wilma打开Firefox和Chrome并使用Firefox登录,它将获得一个会话cookie“7fe0320a…”,并登录

但是Chrome不会有cookie,所以它会获得登录页面。如果Wilma随后使用Chrome登录,数据库行SessionID将更改为“abcd0f03…”,Chrome将被指定为其会话cookie


现在Firefox仍然有它的“7fe0320a…”cookie,但该cookie与现在有“abcd0f03…”的数据库不匹配。它是无效的,因此Firefox将获得登录页面,必须再次登录。

您可以找到许多关于设置服务器身份验证系统的教程,但这里有一个简短的答案。对于生产使用而不是学习,更好的答案通常是使用已经过其他人测试的现有库或框架

不要在数据库中设置“在线”,而是生成某种类型的唯一值。(一种快速且可能不太安全的方法:当前服务器时间的md5哈希+用户ID+一些秘密)

将该值与用户ID一起设置为用户浏览器中的cookie

将该值存储为数据库中的当前会话字段

检查浏览器是否设置了用户ID和会话cookie,而不是检查数据库中的“联机”。在数据库中查找用户ID的当前会话ID,并查看它们是否匹配。如果没有,则显示“会话已过期”和登录页面

SQL注入:清理输入并使用存储过程或安全库,以防止“小Bobby表”将命令塞入ID或会话cookie

更多详情:

如果浏览器转到您的页面,它将具有以下内容之一:

  • 没有cookies:只显示登录页面
  • 用户ID cookie,会话ID cookie:验证,如果有效,则视为已登录
当用户登录时,您可以设置用户ID和会话ID cookie并更新数据库。由于这是您唯一一次设置会话ID cookie,因此不会有其他人或浏览器同时登录

验证:

要进行验证,可以使用用户ID和会话ID执行安全选择或存储过程

如果(SessionID==会话ID cookie),则它们已登录。要保护的每个页面都需要检查此项

数据库

UserID  UserNmae  SessionID
1234    Fred      1234abcd1234abcd...
1235    Barney    null
1236    Wilma     7fe0320a....
每次用户成功登录时,SessionID都会更改,因为服务器会生成一个新值,并将其存储到数据库和响应页面的标题中,以便成功登录

因此,如果Wilma打开Firefox和Chrome并使用Firefox登录,它将获得一个会话cookie“7fe0320a…”,并登录

但是Chrome不会有cookie,所以它会获得登录页面。如果Wilma随后使用Chrome登录,数据库行SessionID将更改为“abcd0f03…”,Chrome将被指定为其会话cookie

现在Firefox仍然有它的“7fe0320a…”cookie,但该cookie与现在有“abcd0f03…”的数据库不匹配。它无效,因此Firefox将获得登录页面,必须重新登录。

s