我正在尝试访问我的解决方案中某个网站的页面编辑器,同时登录到同一 Sitecore 解决方案中另一个网站的 PE。我通过编写我要访问的站点的 URL 来做到这一点,然后是“/?sc_mode=edit”。我的问题是我被重定向到 Sitecore 登录页面。这两个网站具有不同的安全域。这只是在将我们的解决方案从 Sitecore 6.5 升级到 Sitecore 版本 7.1 后才开始发生这是 Sitecore 行为的变化,还是我忽略了允许此类行为的任何设置?我想访问其他站点的 PE,而无需再次验证自己。
更新
为清楚起见,我将添加有关我正在尝试修复的特定功能的更多详细信息:我们网站的 PE 上有一个自定义状态栏,允许用户从解决方案中选择另一个站点并导航到其 PE。实现这一点的代码在 /sitecore/admin 的布局文件中实现,称为AutoLogin.aspx
每次用户从下拉选择器中选择另一个选项时,他都会通过 JavaScript 重定向到他选择的域上的 AutoLogin 脚本。这是自动登录的代码:
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="Sitecore" %>
<%@ Import Namespace="Sitecore.Data" %>
<%@ Import Namespace="Sitecore.Data.Items" %>
<%@ Import Namespace="Sitecore.Data.Fields" %>
<%@ Import Namespace="Sitecore.Globalization" %>
<%@ Import Namespace="Sitecore.Configuration" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Auto Login</title>
<script runat="server" type="text/C#">
protected void Page_Load(object sender, EventArgs e)
{
var user=HttpContext.Current.Server.UrlDecode(Request["user"]);
Sitecore.Web.Authentication.DomainAccessGuard.Kick(Session.SessionID);
if (Sitecore.Security.Authentication.AuthenticationManager.Login(user))
{
Response.Redirect("/sitecore/shell/applications/webedit.aspx");
}
else
{
Response.Write("Invalid username.");
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
Auto login in Page Editor
</div>
</form>
</body>
</html>
AutoLogin 脚本将用户从会话中踢出并尝试将他登录到新域中。这在理论上似乎是合理的,但在实践中似乎行不通。出于某种原因,在踢出用户之后(以及在重新登录之前),Sitecore.Context.User.Name变量仍然设置为在调用 Kick 命令之前登录的用户名。