-1

现在我正在尝试使用 CGI 创建一个 Web 应用程序。这里我使用 C 来做 CGI 部分。我需要处理多个用户。所以这里需要实现用户会话。当用户登录我们的应用程序时,我们应该像在 PHP 会话中一样处理他的会话。如果他的会话空闲很长时间,它应该过期了。请帮我做。我是一名 PHP 人,我在 PHP 会话方面经验丰富。但我是使用 C 的 CGI 新手。我正在等待您的大力支持...

提前致谢....

4

2 回答 2

1

PHP 会话只是在 cookie 和文件之间建立关系。例如:

  1. 向您的访问者发送一个 cookie,该 cookiesid具有一些很难猜到的唯一值(例如 IP + 时间 + 随机数字的 md5)
  2. 在服务器中创建一个同名文件,包含你需要的数据
  3. 每次客户端发出请求时,您都会识别sidcookie 并读取服务器中的相应文件。

Cookie 可以有到期日期,您还可以使用上次请求时间控制会话数据的到期日期。

您还可以使用数据库而不是文件,随着时间的推移,这将更快、更容易维护/清理。

无论如何,我需要问:你为什么需要使用CCGI?当您可以简单地在 CGI 上使用任何其他语言(如 Perl 甚至 PHP)时,听起来很麻烦,或者更好的是,使用像 PHP 或 mod_perl 这样的嵌入式解释器。

尝试重新发明轮子从来都不是一个好主意。在所有以 Web 为中心的语言中,已经有非常好的系统来管理会话和安全性。如果您出于某种原因必须使用C,请研究已经存在哪些系统来通过 Web 管理会话。您将为自己节省大量时间和错误。

于 2013-05-07T05:22:37.473 回答
0

在 C CGI 中管理 Web 会话并不像您想象的那么难。

在您的 CGI 中,您只需要使用 POST/GET 请求、cookie 和一些数据库(例如 sqlite3)进行管理。

在通过 HTTPS 使用登录名/密码获取 POST 请求后进行授权时,您可以使用存储在数据库中的哈希值检查密码哈希值。如果一切正常,您创建一些 ID(例如,用户名和当前时间的哈希值),将其存储在数据库中并在 cookie 中发送用户或响应请求。他的浏览器存储该 cookie 或答案并从 HTTPS 返回到 HTTP。同样在此步骤中,您可以从数据库中删除所有旧 ID。

在身份验证时,您只需检查用户 cookie 中的会话 ID(或在使用本地存储的情况下的请求)和数据库中的 ID。

于 2013-05-07T05:19:31.503 回答