2011-08-06 3 views
0

Здравствуйте, я пытаюсь написать веб-сервер в C#.
Сервер будет динамически создавать веб-сайт на основе определенных шаблонов, которые я определил.
Проблема заключается в том, что вы можете получить доступ к веб-странице только при вводе пароля.
Итак, я решил сделать браузер открытым, поддерживая соединение, передавая каждый запрос через него.
Тогда у меня есть контроль над зарегистрированными клиентами и не вошедшими в систему клиентами. Теперь проблема заключается в том, что Firefox и Google Chrome, когда дело доходит до запроса изображений на веб-сайте, они просто открывают другое соединение из того же ip, но другого порта.
Мой веб-сервер думает, что его другой клиент и отправляет http-адрес входа вместо запрошенного изображения.
Таким образом, каждый раз, когда сайт загружается, только 1 - 4 изображения фактически отправляются.веб-сервер, заставляющий браузер открывать только одно параллельное соединение

Теперь мой вопрос: есть ли способ заставить браузер НЕ, чтобы открыть параллельные соединения?
Или, если не возможно, как мне решить проблему?

Для тех, кто хотел бы видеть некоторый код здесь является то, что ядро ​​сервера выглядит, просто, чтобы понять мою проблему:

void ThreadStart() 
{ 
    while (true) 
    { 
     RunClient(listener.AcceptTcpClient()); 
    } 
} 
void RunClient(TcpClient c) 
{ 
     Thread tht = new Thread(new ParameterizedThreadStart(RunIt)); 
     tht.IsBackground = true; 
     tht.Start(c);//The login page is getting sent... 
     thtt.Add(tht); 
} 

Спасибо заранее, Алекс

+0

1) Пожалуйста, не префиксайте свои заголовки такими строками, как «C#». Вот у нас есть теги здесь [SO]. 2) Вам лучше прочитать [faq] и узнать, как делать форматирование здесь, а не использовать HTML. –

+0

Не могли бы вы просто дать мне конструктивный намек вместо того, чтобы критиковать мое форматирование? – alex

+0

Почему вы пытаетесь изобрести колесо? Даже если вы решили использовать ASP.NET, это не правильный выбор для вас, по крайней мере, использовать аутентификацию с помощью файлов cookie или идентификатора сеанса. Есть причина, по которой все это делают. – svick

ответ

3

аутентификации соединение HTTP, а чем отдельные запросы ошибочны, ошибочны, ошибочны. Даже если вы можете заставить браузер повторно использовать одно соединение (чего вы не можете, потому что это не так работает HTTP), вы не сможете рассчитывать на то, что это соблюдается прокси или прозрачными веб-кэшами.

Это (некоторые из), для чего были изобретены печеньки. Используйте их или какой-либо идентификатор сеанса, встроенный в URL-адреса.

+0

Я думал об этом уже, но файлы cookie - очень плохая идея из-за того, что соединение установлено через http. Только процесс входа в систему проходит через https. Разве это не упростило бы захват сеанса? – alex

+0

Что, если вы проверяете https (что хорошо), как вы собираетесь связывать одно соединение http (которое будет отдельным TCP-соединением) с более ранней транзакцией входа https? Почему бы не сделать все (или, по крайней мере, все, что должно быть аутентифицировано или храниться в секрете) по https? –

+0

Ну, сначала устанавливается HTTPS-соединение, а затем после POST-пароля через https мой слушатель уже ожидает повторного подключения к IP и PORT, теперь он запускает HTTP-соединение, отправляя заголовок «Connection: Keep-alive». С этого момента соединение не может быть закрыто без повторной регистрации! – alex

Смежные вопросы