有人可以解释为什么 ?___SID=U 出现在我网站上的某些 Magento URL 中,而不是其他 URL 中吗?
我认为这与会话有关,但我并不完全清楚。此外,更令人困惑的是它只出现在某些 URL 而不是其他 URL 中。
我不需要知道如何删除它,因为我知道管理区域中的设置。我真的很想解释它是什么,它的目的是什么,以及为什么它会显示在某些页面上而不是其他页面上。我宁愿完全了解正在发生的事情,也不愿盲目地遵循一些关于如何删除它的建议。
除了 Brendan 的回答之外,我还在___SID=U
缓存中用作会话 ID 的占位符。它被替换为Mage_Core_Model_Url::sessionUrlVar()
which 依次调用Mage_Core_Model_Url::sessionVarCallback()
。这些方法从 调用Mage_Core_Block_Abstract::_afterCacheUrl()
,这意味着在块输出中找到的任何 URL 都将包含正确的会话 ID(如果需要)。
因此,要以“正确的方式”摆脱您自己代码中的参数,请使用以下命令:
$url = Mage::getUrl('some/magento/route'); // might append ___SID parameter
$url = Mage::getModel('core/url')->sessionUrlVar($url); // process ___SID
如果字符串仍然显示在呈现的页面中,那就是一个错误。您是在使用一些自定义缓存模块,还是使用非标准方式生成 URL?
SID 是“会话 ID”。Magento 使用它来跟踪用户在同一 Magento 安装中的活动。通常,Magento 通过一个安装(数据库)为一个网站和一个商店提供支持。
Magento 可以通过一个安装为多个具有多个商店的网站提供支持。SID 允许用户在浏览这些网站/商店时保持登录状态。
我认为如果您启用了该功能,则在访问目录 URL 时会发送 SID,以便 Magento 可以使用当前网站/商店的用户位置/状态更新会话。
如果您没有运行多网站或多商店环境,则在前端禁用 SID 是安全的。
只是我今天遇到的一些事情,虽然我发表了评论,但也许它会对某人有所帮助。我发现如果在处理页面期间出现一些错误,Magento 将格式化/创建一个不正确的产品 url(包括会话 ID)。不过这并不一致。值得查看您的服务器日志中的 PHP 错误。
这是一个已报告给 magento 的一般 Magento 2 错误。
临时修复是
转到文档根目录,找到 .htaccess 并添加
RewriteCond %{HTTP_HOST} ^abc.com
RewriteRule ^(.*) www.abc.com/$1 [L,R=301]
以下。
这应该可以解决问题。对我来说,这项工作在 M2.1
一切顺利。
我找了几个小时才找到这个,准确的答案是这里列出的其他答案的组合。首先,我启动了我的 PHP 错误报告和错误记录(感谢 Gergely Varga)。我看到了这个:
PHP Fatal error: Call to undefined function mb_strrpos() in /var/www/html/app/code/local/ManaPro/FilterAjax/Model/Observer.php on line 59
所以,我们安装的扩展之一需要php-mbstring
我的服务器没有安装的包。我一安装,SID=U
网址就全部消失了。(将来我将在将现有安装复制到新服务器之前运行 Magento 的预安装检查!)
也感谢 Vinai 提供了这个标签的背景。