Вместо использования SharedObject вы можете создать две простые серверные службы: одну, поддерживающую сеанс, и другую, предоставляющую сеанс через сгенерированный файл XML, который может использовать ваше флэш-приложение.
Первая служба установит некоторые переменные сеанса и должна вызываться при каждом воспроизведении видео. Это может выглядеть так:
<?php
// start-video.php
session_start();
$_SESSION['hasWatchedVideo'] = true;
$_SESSION['watchedVideoAt'] = time();
?>
Второй сервис - это тот, который генерирует XML-ответ на основе сеанса. Это может выглядеть так:
<?php
// flash-config.php
session_start();
// set expiration to 5 min
define(VIDEO_TIMEOUT, 300);
$playVideo = "true";
if($_SESSION['hasWatchedVideo']
&& (time() - $_SESSION['watchedVideoAt']) < VIDEO_TIMEOUT) {
$playVideo = "false";
}
header("Content-Type: text/xml");
echo "<config><playVideo>{$playVideo}</playVideo></config>";
?>
Тогда из вашего приложения Flash вы можете сделать это:
/**
* Called whenever the app is loaded.
*/
protected function init():void {
var u:URLLoader = new URLLoader();
u.addEventListener(Event.COMPLETE, onComplete);
u.load(new URLRequest("http://example.com/flash-config.php"));
}
/**
* Determines whether or not the video should play based on the
* config service response.
*/
protected function onComplete(e:Event):void {
var x:XML = new XML(e.target.data);
if(x.playVideo == 'true') {
playVideo();
}
}
/**
* Should be called either when the video starts playing. I just tied
* it to a user click here.
*/
protected function playVideo():void {
// call the service to update the session
var u:URLLoader = new URLLoader();
u.load(new URLRequest("http://example.com/start-video.php"));
// ... play video code ...
}
Я думаю, что этот подход дает вам немного больше гибкости, чем использование SharedObject. Надеюсь, это поможет.
UPDATE
Вы также можете использовать сессионный cookie в браузере. В основном установите дату окончания срока действия на «0», и срок действия файла cookie истечет, когда пользователь закроет браузер. (Примечание: когда я проверял это в Firefox, закрытие вкладки было недостаточно, чтобы уничтожить cookie. Весь браузер должен был быть закрыт.)
Вы можете использовать ExternalInterface или служебную библиотеку, подобную этой . Используя библиотеку, вы можете иметь такой код в вашем приложении:
function playVideo():void {
if(!CookieUtil.getCookie('playvideo')) {
CookieUtil.setCookie('playvideo', 'true', 0);
// ... play video code ...
}
}
Каждый раз, когда пользователь закрывает браузер, cookie будет очищен. В следующий раз, когда они посетят ваш сайт, видео будет воспроизведено снова. Не уверен, что это больше соответствует тому, что вы ищете, но надеюсь, что это поможет.