Упс! это было простое исправление, которое я игнорировал.
я исправил этот код
list_filter = ['Report__branch']
date_hierarchy = 'Report__date'
Обновление:
Для чего-то как единственный URL использования я пошел бы с GUID-esque appoach, который был предложен. Удостоверьтесь, что имели короткую продолжительность жизни на ссылке.
Для мгновенного входа в систему нет никакого действительно безопасного способа иметь единственный URL.
Да можно генерировать URL, который будет чертовски почти невозможным предположить, но это не дает Вам супер безопасность. Если Вы хотите помнить пользователей, почему бы не использовать зашифрованный cookie аутентификации?
Пример, который Вы даете, Google Calendar, не регистрирует Вас на пути один только URL, Вы должны аутентифицироваться сначала, прежде чем URL означает что-либо.
Например, нажатие на Google Календарь от моего Gmail дает мне:
https://www.google.com/calendar/render? tab=mc&gsessionid =-LTeHrnKoeAbDcVaN68NHA
Это не помогает Вам получить доступ к моей учетной записи, если Вы сначала не прошли проверку подлинности как я.
Старое сообщение:
Можно генерировать GUID в PHP, использующем com_create _guid и использование это.
На Linux я думаю, что можно использовать uuid_create или этот код отсюда:
<?php
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
}
echo guid();
?>
Попробуйте uniqid - и возможно объединитесь с хешем md5, как дали в примерах:
// no prefix
// works only in PHP 5 and later versions
$token = md5(uniqid());
// better, difficult to guess
$better_token = md5(uniqid(rand(), true));
Я должен отметить однако, что никакие URL, сгенерированные таким образом (безотносительно хеш-алгоритма), не будут 'безопасными', просто очень трудными предположить.
Просто генерируйте GUID. Это важно, хотя это, не последовательный GUID старого стиля все же.
Однако кажется, что php не имеет своей собственной производящей функции GUID. Функция com_create_guid, предложенная в другом ответе, кажется, только доступна в php при работе Windows.
Существует предложенная альтернатива пользователя для com_create_guid для не-Windows на странице руководства для него:
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
}
Но я должен признать, что отказался бы использовать его для чего-либо важного в случае, если была не очевидная проблема, скрывающаяся в нем, который не определили мои некриптографически тренируемые мозги.
Идентификатор должно быть невозможно предположить, GUID уникальны, но не являются этим трудно для предположения.
Вам нужен хороший генератор случайных чисел, каждая библиотека криптографии/шифрования имеет по крайней мере один, я не знаю PHP, таким образом, я не могу дать Вам имя функции.
Затем необходимо решить, какой длины случайное число будет, необходимо выбрать длину, столь большую, что любой предполагающий число получит неназначенное число - также:
Оцените количество уникальных URL, которые необходимо будет генерировать, вычислить, сколько битов необходимо представить их всех и затем удвоить число битов (по крайней мере).
Или, возьмите наибольшее число, которое примут Ваши пользователи
Теперь у Вас есть "безопасное" число, можно просто преобразовать его в десятичное число, шестнадцатеричное число или base64 и использование та строка.
Если Вы хотите удостовериться, что URL и уникален и может только использоваться ограниченное количество раз:
Сохраните маленькую базу данных с полями как: RandomKey
, InternalURL
, Counter
, TimeStamp
Создайте случайное число из достаточно большого пула.
Не Последовательные GUID должны быть достаточными
Сохраните его в своей базе данных как RandomKey
, наряду с фактическим внутренним URL или кодом ресурса, необходимым Вашей системе для обработки того URL и метки времени.
Когда пользователь нажмет или введет URL, проверьте его по той базе данных: если TimeStamp
слишком старо или Counter
слишком высоко, примите соответствующие меры (например, если Вы хотите, чтобы этот URL был доступен на ограниченный срок или определенное количество раз).
Иначе просто рассматривайте запрос с помощью InternalURL
и передайте его результат обратно пользователю.
Когда URL использовался или достиг своего максимального счетчика использования, затем просто удалите его из базы данных, таким образом, он не может использоваться дальше.
Здорово, чтобы дать Вам одноразовые URL, которые практически невозможно предположить.
Конечно, необходимо также реализовать некоторые проверки безопасности для ограничения уровня, на котором люди могут попытаться получить доступ к недопустимому URL.
Я избежал бы этого для:
1) Момент входит в систему ярлык/значок для пользователей
потому что эти URL могут кэшироваться/зарегистрированы прокси, блоги, кэш браузера, закладки, электронные письма и т.д.
Обрезать дополнительные фигурные скобки
$guid = strtolower (обрезка (com_create_guid (), "{}")); (PHP 5 или позже)