本文将解释如何创建/保持/使用会话。
最重要的部分是如何管理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_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");