这是我的解决方案的一般概念,它不实现 cookie。我知道它实际上并没有回答这个问题,但是在与 Valentin 讨论(见评论)并仔细考虑之后,我意识到 cookie 不是一个好的设计选择,而且容易出现很多问题。我决定改写一个 Joomla Content 插件。这会在内容中查找一对 {showappwithuser} 标签,并将其替换为指向标签对内 URL 的 iframe。例如:
{showappwithuser}http://www.somewebsiteapp.com{/showappwithuser}
这将替换为指向http://www.somewebsiteapp.com?uid=joomlausername的 iframe. 这会将信息传递给接受应用程序,然后该应用程序可以执行它需要执行的操作。完整的代码如下,但仍然有点笨拙,因为大部分内容都是硬编码的。我需要添加参数处理,以便内容创建者可以选择 iframe 设置,如宽度、高度、滚动条访问。我还计划集成 uid 参数的加密,这样应用程序之间的信息就会有些混淆。这真的可以有很多不同的方向,如果编写正确,它可以成为一个很好的插件,可以将任何非 Joomla 应用程序无缝集成到 Joomla 站点中。使用此方法将其他参数信息发送到应用程序也有无限可能。享受!
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// import the general plugin file of Joomla!'s library
jimport( 'joomla.plugin.plugin' );
// hook into the plugin framework
class plgContentShowAppWithUser extends JPlugin
{
// the core code to create an iframe and set it's URL source
// with the logged in user name from Joomla
public function onContentPrepare($context, &$row, &$params, $page = 0)
{
$starttriggerpos = strpos($row->text, "{showappwithuser}");
$iframeurl = "";
if ($starttriggerpos !== false)
{
$endtriggerpos = strpos($row->text, "{/showappwithuser}");
if ($endtriggerpos !== false)
{
$iframeurl = substr($row->text, $starttriggerpos+17, $endtriggerpos-$starttriggerpos-17);
if (!JFactory::getUser()->guest)
{
$username = trim(JFactory::getUser()->username);
if (strlen($username) > 0)
{
$row->text = '<iframe src="' . $iframeurl . '?uid=' . $username . '"' . ' frameborder=0 scrolling=auto width=725>This application requires a browser that supports iframes.</iframe>';
}
else
{
$row->text = "Your web site login could not be determined. Please correct this and try again.";
}
}
else
{
$row->text = "You must login to the web site in order to access this content.";
}
}
}
}
}