2015-05-15 3 views
0

Я использую django для создания своего веб-сервера, другие люди подключаются ко мне как клиенты. Теперь мне нужно знать номер порта клиентов, чтобы отличить их. Если их браузер открывает две «вкладки» одной и той же ссылки, т. Е. Две страницы, но одну и ту же ссылку, я также должен их различать.Как мне получить номер порта клиента в проекте Django?

Хотя я знаю, что могу использовать request.META [ «REMOTE_ADDR»], чтобы получить IP-адрес клиента в моей функции зрения Джанго, но это действительно не достаточно для меня.

Затем я изучил некоторые основы TCP/IP, а затем я знаю, что на уровне TCP/IP каждый IP-пакет имеет IP-заголовок, который содержит номер порта клиента. Но как я могу получить к нему доступ в django?

Дополнительная информация:

  • Я использую Python 2.6 и Джанго 1,4
  • Я знаю, что каждый TAB броузера будет выделен случайным уникальный порт для доступа к моему Джанго веб-странице порта. - см. эту ссылку 'The web server opens port 80, but the browser has a different, randomly-assigned port.' Мне действительно нужно их отличить. Поэтому мои интуитивные мысли - использовать номер порта в IP-пакете. Если у вас есть какие-либо другие предложения, также приветствуются.
  • Я нашел the similar question here, но я не использую Apache сейчас. И это может быть трудно для меня, так что, возможно, возникнут другие более сложные вопросы. Это может сделать этот простой вопрос сложным.
+0

Существует аналогичный вопрос [здесь] [1] [1]: http://stackoverflow.com/questions/20316078/how-to-retrieve-remote-port-in -django – Gocht

+0

Я видел эту тему, но решение, возможно, не самое лучшее. Поэтому я задаю этот вопрос более прямо здесь. И в группах google я видел смешные ответы, что клиент использует тот же порт, что и сервер, для доступа к моему сайту ... –

+1

Пробовал ли вы [сеансы] (https://docs.djangoproject.com/en/1.8/topics/http/sessions /)? –

ответ

0

Да, после нескольких дней изо всех сил, я ответить на него, с рабочим, но некрасиво решение на «как получить порт клиента в Django ».

  1. в вашем python26/Lib/SocketServer.py, найти def process_request_thread, добавить global gClientPort; gClientPort = client_address

  2. использовать данную глобальную ценность в YOUT проекта. Например, его формат ('12 .34.56.78 ', 55437). 55437 - номер порта.

1
  1. Ваше предположение о «каждом подключении пользователя открывает соединение на уникальный порт» является неправильным. Все пользователи используют один и тот же порт для подключения.
  2. Чтобы отличить пользователей, Django (и почти все другие фреймворки) использует сеансы. Каждый пользователь получает cookie с уникальным идентификатором сеанса, и этот файл cookie передается серверу на каждом соединении, поэтому приложение может различать пользователей.

Вот документация по сессиям:

https://docs.djangoproject.com/en/1.8/topics/http/sessions/

+0

Да, вы правы. Они получают доступ к моему серверу через порт 80, который я открыл с помощью python & django. Но у их браузера есть другой, случайно назначенный порт для доступа к моему порту 80. Который я могу обнаружить из своих IP-пакетов, отправленных мне сюда, это в заголовок IP, который я получил. –

+1

OP правильный. Каждое соединение происходит из другого порта. Он __leads__ к тому же IP-порту на сервере - но это не то, что было задано. Попробуйте netstat на вашем компьютере, открыв несколько открыток браузера. Вы правы, хотя использование этого как сеансового ключа не является хорошей идеей. – deets

+1

Вы путаете порт сервера с портом, который прослушивает браузер. См. Вопрос, связанный с OP. Тем не менее, вы не ошибаетесь в использовании сеансов здесь. –

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