我想限制已登录的用户访问资源(pdf、doc、docx等)文件。
资源位于/var/www/html/media/wysiwyg/…
因此,如果有人试图访问URL http://domain/media/wysiwyg/sales.pdf
,如果他们没有登录,我想将他们重定向到登录页面。
我计划使用。htaccess重写并包装所有访问尝试通过一个。php程序,将检查用户是否登录或不-但我不确定如何检查用户的登录状态。
我试着:
require_once 'app/Mage.php';
Mage::app('', '');
//GET SESSION DATA
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('customer/session', array('name'=>'frontend'));
if($session->isLoggedIn()){
// send data
}
else
{
// redirect to login page
}
但是isLoggedIn()总是false。
这取决于您的规格,但我想知道为什么要从媒体目录中处理这个问题,而您已经有可下载的产品选项
- 你可以在你的管理面板 设置
- 根据客户角色自定义
- 将其作为免费产品
- 限制下载次数
- 您甚至可以将其与其他产品捆绑在一起(如果您正在销售带有其文档的机器)
我猜你所有的需要都在里面,如果你需要的东西没有实现,你可以自由地扩展和编写你自己的
如果你来更新你的问题,请更新它,我很乐意帮助:)
试试这个:
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/app/Mage.php');
umask(0);
Mage::app();
if (Mage::getSingleton('customer/session')->isLoggedIn()) {
// send data
}
else {
// redirect
}
可下载的产品选项不太符合我们的需求——我们有很多资源页面需要更新,新文件需要上传到媒体文件夹。
在做了更多的研究后,我想出了如何测试是否有一个登录用户:
require_once 'app/Mage.php';
Mage::app();
$coreSession = Mage::getSingleton('core/session', array('name' => 'frontend'));
if(isset($coreSession['visitor_data']['customer_id'])){
// there is a customer id, so someone is logged in
// send the file
}
else
{
// redirect to login page, or a page that explains why the link doesn't work
}
如果您想获得关于已登录用户的信息,您必须首先使用loginById方法:
if(isset($coreSession['visitor_data']['customer_id'])){
$customerId = $coreSession['visitor_data']['customer_id'];
// Load the user session.
Mage::getSingleton('customer/session')->loginById($customerId);
$customerSession = Mage::getSingleton("customer/session");
// Load customer
$customer = $customerSession->getCustomer();
}
当您搜索如何验证客户是否登录时,出现了许多解决方案,显示使用$customerSession的isLoggedIn()方法,但如果您不使用cusotmerId和loginById方法"登录",isLoggedIn方法将始终返回false