C# 应用程序与 phpBB 论坛的会话管理

本文将解释如何创建/保持/使用会话。

最重要的部分是如何管理C#和 phpBB 之间的 cookie。

使用代码

第一步是准备要发送到论坛的帖子数据,作为一个字节数组。它将包含登录过程所需的所有信息:用户名、密码。

一个重要的参数是名为 "redirect" 的参数,因为 login.php 脚本将在登录成功时重定向到主页。在这种情况下,不会收到 cookie。关键是指定一个无效的重定向参数,以便 phpBB 停止执行(以便可以接收 cookie)。

C#代码示例:

StringBuilder builder = new StringBuilder(); builder.Append("autologin=1&login=true&username=" + _user + "&password=" + _password + "&redirect=\n"); byte[] data = Encoding.ASCII.GetBytes(builder.ToString());

接下来,获取 phpBB 发送的 cookie:

string[] keys = response.Headers.GetValues("Set-Cookie");

cookie 应该包含这两个参数:

  • phpbb2mysql_data,这是一个包含用户 ID 和其他信息的序列化数组。
  • phpbb2mysql_sid,这是会话密钥。如果用户名和密码不正确,phpbb2mysql_data 将包含 -1,表示登录失败。

如果登录成功,像 phpbb2mysql_sid、phpbb2mysql_data 和用户名这样的信息将通过使用序列化存储在文件中。棘手的部分是这些信息会随时间变化。在下一次向论坛的请求中,phpBB 将检查会话并在数据库中更新它。这意味着在每次发送的请求中,都需要使用最新的 cookie 更新它们。

以下是如何初始化类:

PhpBBLogin.Instance.Domain = "www.your-domain.com"; // set this value from your admin area PhpBBLogin.Instance.ValidityDaysForKey = 5; // if something goes wrong, use LastError public member PhpBBLogin.Instance.LoadCache(); // if something goes wrong, use LastError public member PhpBBLogin.Instance.OnError += new EventHandler(Instance_OnError); PhpBBLogin.Instance.OnLoginFinish += new EventHandler(Instance_OnLoginFinish); PhpBBLogin.Instance.OnLogoutFinish += new EventHandler(Instance_OnLogoutFinish);

如何登录:

PhpBBLogin.Instance.Login("username", "password"); // This request is done in a separated thread. // when it finishes the OnLoginFinish event is triggered // and you can check the property PhpBBLogin.Instance.IsLogged to see if login succeed. string message = "new post"; string subject = "subject"; int f = 1; // this is the forum ID. string post = "Post"; // PostMessage method will handle the post creation PhpBBLogin.Instance.PostMessage("subject=" + subject + "&" + "message=" + message + "&" + "topictype=" + topictype + "&" + "f=" + f + "&" + "post=" + post + "&" + "mode=newtopic");
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485