PHP Session при использовании настольного приложения - PullRequest
0 голосов
/ 11 апреля 2010

В этом вопросе я спросил, как сделать POST в php-файле из приложения vb.net: POST на веб-страницу в vb.net (формы win, рабочий стол, не ASP.net) Итак, теперь я вошел в систему пользователя user, опубликовав его имя пользователя и пароль в php-файле, затем php-файл выполняет проверку безопасности / проверяет их наличие и т.д. .

Теперь, если приложение vb.net пытается загрузить данные со страницы, на которую пользователь должен войти, оно проверяет это, выполнив:

if (!isset($_SESSION['uid'])) {
    header("Location: index.php");
}

Однако после правильной регистрации в приложении переменная сеанса не устанавливается. Как сессия работает с приложением vb.net, как это?

При успешном входе пользователя в систему я должен загрузить идентификатор пользователя и сохранить его в приложении vb.net, а затем опубликовать его на каждой странице, требующей аутентификации?

Ответы [ 4 ]

0 голосов
/ 11 апреля 2010

Получите настольное приложение для чтения в заголовках, которые отправляются сценарием php до фактического содержимого страницы.

Одним из этих заголовков будут данные cookie, их нужно хранить, потому что их нужно отправлять каждый раз, когда вы запрашиваете страницу из сценария php.

Итак, вам нужно узнать, как читать заголовки из ответа и писать заголовки для запроса.

Если вам трудно, вы можете передавать данные через параметры GET url, например: http://example.com/?loginid=12345

0 голосов
/ 11 апреля 2010

Сеансы в PHP (и любой другой веб-платформе, которую я знаю) работают следующим образом:

  • Клиент делает первый запрос / отправляет данные для входа
  • PHP создает сеанс для клиента, генерируется случайный идентификатор сеанса
  • PHP-скрипт помечает этот сеанс как «авторизованный»
  • PHP отправляет сгенерированный идентификатор сеанса клиенту (обычно через cookie)
  • Клиент делает последующие запросы и всегда отправляет сессионный идентификатор
  • PHP распознает клиента по идентификатору сеанса и загружает данные сеанса

Если ваш клиент отправляет запрос, не отправляя идентификатор сеанса каким-либо образом, он всегда будет «не авторизован» - идентификатор сеанса заставляет скрипт PHP «запоминать» свое состояние.

Если ваша WebApp библиотека не обрабатывает файлы cookie сеанса (я не знаком с программированием и библиотеками vb.net), найдите библиотеку, которая может, или, может быть, проще, заставить PHP-скрипт распечатать сеанс ID при успешном входе. Поймайте эту распечатку в вашем приложении и добавьте следующий параметр GET:

?PHPSESSID=123456

(123456 - ваш идентификатор сеанса) на каждый последующий запрос, который вы отправляете из приложения в PHP. Таким образом, PHP должен быть в состоянии распознать правильный сеанс.

Как я уже сказал, я не знаком с VB.NET, поэтому могут быть более элегантные, готовые решения для этого. Но это определенно сработает, если их нет.

0 голосов
/ 11 апреля 2010

Чтобы ваш веб-сайт PHP распознавал клиент VB.NET как зарегистрированного пользователя, вам необходимо отправить файл cookie. Когда вы используете session_start () в PHP, PHP установит случайный идентификатор в куки посетителей, чтобы связать сессию. Что вам нужно знать, что это за идентификатор. Более конкретно, при первом обращении к веб-сайту вы должны прочитать это.

В вашем другом вопросе я видел, что вы используете экземпляр WebClient. Если вы отправили запрос, есть также свойство ResponseHeaders. Это коллекция, которая содержит заголовки ответа от веб-сервера (в данном случае веб-сервер, на котором работает ваш сайт). Скорее всего, он также будет содержать код cookie.

Например:

Dim myWebClient As New WebClient

Dim responseArray = myWebClient.UploadData("http://...", "POST", Encoding.ASCII.GetBytes(postData))
Dim MyCookie As String = cl.ResponseHeaders.Item(HttpResponseHeader.SetCookie)

myWebClient.Headers.Add(HttpRequestHeader.Cookie, MyCookie)

В этом примере вы должны обработать массив responseArray, но это основной принцип хранения куки и его отправки обратно. Следующий запрос, отправленный вами с тем же экземпляром этого веб-клиента, будет содержать файл cookie, на который ваш сайт ответил последним запросом. По сути, это означает, что SessionID, создаваемый сайтом PHP, будет запрограммирован и отправлен обратно.

Лично я бы написал об этом небольшой класс-обертку. Просто сделайте функцию, которая отправляет запрос входа в систему на ваш конкретный сайт. Затем сохраните куки, и каждый запрос, который вы отправите позже, вы добавите в него. Вы можете легко написать «универсальный» метод, такой как строка GetPage (строка URL); строка PostPage (строка URL, строка PostData) и т.д.

0 голосов
/ 11 апреля 2010

Вы должны в основном реализовать эту функциональность браузера в отношении управления сессиями. То есть либо вы должны указать идентификатор сеанса в своем URL-адресе (если веб-сервер поддерживает и разрешает это), либо хранить идентификатор сеанса в файле cookie, а при выполнении HTTP-запроса следует передавать файл cookie вместе. Это предпочтительный метод.

Обратите внимание, что System.Web содержит классы для выполнения запросов Http и получения ответов Http, поэтому вам не нужно писать все самостоятельно, просто используйте классы в этом пространстве имен, и вы можете реализовать это довольно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...