Сессии php и десериализация

Задача, проход по списку сессий, сессия стандартно в файлах, получить доступ к данным.
<div id="usersmonitor" >
<table id="usersmonitortable" class="table table-bordered table-hover table-condensed table-fixed">
<thead>
<tr><th style="width: 15%;">Последняя активность</th><th style="width: 35%;">ФИО</th><th style="width: 25%;">e-mail</th><th style="width: 25%;">Роль</th></tr>
</thead>
<tbody>
<?php 
function unserialize_php($session_data) {
        $return_data = array();
        $offset = 0;
        while ($offset < strlen($session_data)) {
            if (!strstr(substr($session_data, $offset), "|")) {
                throw new Exception("invalid data, remaining: " . substr($session_data, $offset));
            }
            $pos = strpos($session_data, "|", $offset);
            $num = $pos - $offset;
            $varname = substr($session_data, $offset, $num);
            $offset += $num + 1;
            $data = unserialize(substr($session_data, $offset));
            $return_data[$varname] = $data;
            $offset += strlen(serialize($data));
        }
	return $return_data;
}

$directory = session_save_path().'/';
$filenames = array();
$iterator = new DirectoryIterator($directory);
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isFile()) {
        $filenames[$fileinfo->getMTime()] = $fileinfo->getFilename();
    }
}
krsort($filenames);

foreach($filenames as $mt => $fn) {
 $ot = new \DateTime();
 $ot->setTimestamp($mt);
 $st = $ot->format('d.m.Y H:i');
 $t = unserialize_php(file_get_contents($directory . $fn));
 if (isset($t['auth']) && isset($t['auth']['user'])) {
	$tt = (object)$t['auth']['user'];
	echo "<tr><td>{$st}</td><td>{$tt->nameLast} {$tt->nameFirst} {$tt->nameMidle}</td><td>{$tt->email}</td><td>{$tt->name}</td></tr>";
 }
}

?>
</tbody>
</table>
</div>

<script>
$(function () {
	setInterval( function() {$('#usersmonitor').load('/users/usersmonitor #usersmonitortable', {act: 'refresh'})} , 30100 );
});
</script>

TRY_CONVERT, TRY_CAST в MSSQL 2005

Сообразил такой вариант, прям в запрос, удобно
select c1.value('xs:integer((/v)[1])','int') ci1, c1.value('xs:float((/v)[1])','float') ci1 from (
	select cast('<v> 1234 </v>' as xml) c1 union all
	select cast('<v>1234 Z</v>' as xml) c1 union all
	select cast('<v>12,3</v>' as xml) c1 union all
	select cast('<v>12.3</v>' as xml) c1 union all
	select cast('<v>23e2</v>' as xml) c1
 ) tt

ci1	ci1
1234	1234
NULL	NULL
NULL	NULL
NULL	12,3
NULL	2300

select cast('<v>1234</v>' as xml).value('xs:integer((/v)[1])','int') ci1

Это не проверял
CREATE FUNCTION TryCastInt(@inputStr nvarchar(max))
RETURNS int 
AS 
BEGIN
	DECLARE @ret int;
	set @ret = -999999
	IF  (~(cast(patindex('%[^0-9]%', @inputStr) as bit))) >0
		select @ret = cast (@inputStr as int) 
	ELSE
	 set @ret  = -999999
 RETURN @ret;
END;

Немного другой вариант, для поразмыслить
<code>DECLARE @VARCHARString VARCHAR(8000)
SET @VARCHARString = '000012W`''ASDASDS3A@!#@!#_)+)_4)'
SELECT @VARCHARString
--Remove non numeric charecters from the varchar variable
WHILE PATINDEX('%[^0-9]%', @VARCHARString) > 0
SET @VARCHARString = STUFF(@VARCHARString, PATINDEX('%[^0-9]%', @VARCHARString), 1, '')
SELECT @VARCHARString + c1 from (
 select 1 c1 union all
 select 2 c2
) tt

Служба «Служба профилей пользователей» препятствует входу в систему. Невозможно загрузить профиль пользователя.

Усложнение уровня, имеем удаленного пользователя, у пользователя одна учетная запись, попасть на рабочий стол он не может получает сообщение
Служба «Служба профилей пользователей» препятствует входу в систему. Невозможно загрузить профиль пользователя.
01_sm[1] Перезагрузка, жмет F8 (часто) 02_sm[1] И «Последняя удачная конфигурация» не помогла, совсем плохо.
  1. Опять Ф8
  2. заходим в безопасный режим
  3. создаем пользователя с правами администратора
  4. перезагрузка
  5. заходим в систему этим пользователем
  6. скачиваем и запускаем TeamViewer
  7. заходим удаленно и проделываем операцию по восстановления профиля HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList
    • Если есть папки вида S-1-5-21-*… и S-1-5-21-*….bak Нужную папку S-1-5-21-*… определяем по имени параметра «ProfileImagePath», который указывает путь к профилю. Правильная папка с именем вида S-1-5-21-*….bak Неправильная папка с именем вида S-1-5-21-*…. Переименуйте папку с именем вида S-1-5-21-*… в S-1-5-21-*….bk Переименуйте папку с именем вида S-1-5-21-*….bak в S-1-5-21-*…. удалив в имени .bak Удаляем S-1-5-21-*….bk
    • Если папка с именем вида S-1-5-21-*… одна или нет папки с именем вида S-1-5-21-*….bak В таком случаи измените значения на «0» в имени параметра «RefCount» и «State», которые находятся в папке S-1-5-21-*…
    • И еще вариант, в независимости от того, была одна папка или мы восстановили данные из «.bak» значения параметров «RefCount» и «State» сбрасываем в 0
  8. перезагрузка
  9. клиент заходит в систему старым пользователем

Условные комментарии начиная с IE 10 больше не работают

<!-- [if IE 6]><style type="text/css">
   .transparent { background: #0078c9; }
</style><![endif]-->
https://msdn.microsoft.com/en-us/library/hh801214(v=vs.85).aspx «Отделить» 10-ый от 11-го с помощью js или на бекенде аналогично распарсить User-Agent
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
    document.body.className = document.body.className+' ie ie11';
} else if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
    document.body.className = document.body.className+' ie ie10';
} else if(uA.indexOf('MSIE ') != -1) {
    document.body.className = document.body.className+' ie ieo';
}