我们在Linux共享服务器上有一个wordpress站点(使用cPanel)。 我们希望创建一个登录脚本,将我们的网站连接到另一个使用微软服务器的链接(ASPX页面)。当我们使用该脚本并尝试登录时,我们会看到以下错误:
"/NET"应用程序中的服务器错误。
视图状态 MAC 验证失败。如果此应用程序由 Web 场或群集承载,请确保配置指定相同的验证密钥和验证算法。自动生成不能在群集中使用。
http://go.microsoft.com/fwlink/?LinkID=314055
我们做了一些检查,似乎这个问题可以通过在Windows服务器上编辑web.config文件来解决,但我们是linux。任何人都可以建议如何在wordpress上解决问题吗?
以下是我们在wordpress中使用代码的方式:
<form method="post" action="http://owners.mydomain.com/login.aspx" id="ddl00">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/fdfdfaerghjkkaaklgjlakrrvc34fdfWjAdfdfdfamNIzDfdf6adBjuDFWfzdfmdffY" />
</div>
<div class="aspNetHidden">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/dfdfdasfasdfjglakfJKLFJDLKJR34252KKJLKJFD/fdfkadfeoawrfir/IeirIIURIR+KKJFKEjkdsfjerk" />
</div>
<table style="width:auto; margin:2em auto 0 auto;">
<tr>
<td class="label">
Username
</td>
<td>
<input name="username" type="text" id="username" tabindex="1" />
</td>
</tr>
<tr>
<td class="label">
Password
</td>
<td>
<input name="password" type="password" id="password" tabindex="2" />
</td>
</tr>
<tr>
<td colspan="2" class="button_row">
<input type="submit" name="ctl15" value="Login" tabindex="3" />
</td>
</tr>
</table>
</form>
在WordPress的表单中,您有两个隐藏字段,__VIEWSTATE
和您复制的值__EVENTVALIDATION
。
这些值是自动生成的,并从 ASP.NET 引擎用于验证每个接收请求。
您使用的值已过期,预计会收到此错误。
如果您有权访问 ASP.NET 应用程序,则需要调整该应用程序,以便它可以从其他应用程序接收 POST。我正在考虑一个空白页面(例如 external-login.aspx
),将接受这些 POST 并检查凭据。
举个例子:
WordPress网站中的Web表单
<form method="post" action="http://owners.mydomain.com/external-login.aspx">
<table style="width:auto; margin:2em auto 0 auto;">
<tr>
<td class="label">
Username
</td>
<td>
<input name="username" type="text" id="username" tabindex="1" />
</td>
</tr>
<tr>
<td class="label">
Password
</td>
<td>
<input name="password" type="password" id="password" tabindex="2" />
</td>
</tr>
<tr>
<td colspan="2" class="button_row">
<input type="submit" name="ctl15" value="Login" tabindex="3" />
</td>
</tr>
</table>
</form>
外部登录中的代码.aspx
protected void Page_Load(object sender, EventArgs e)
{
string username = Request.Form["username"];
string password = Request.Form["password"];
//Code here that checks the credentials and logins the user
}