PDA

Просмотр полной версии : Одна учетная запись для всех сайтов


elf
18.03.2009, 16:31
Как использовать одного учетного записа к нескольким сайтам?
У меня site.com. У него БД учетных записей. Я хотел бы на другом сервере запускать music.site.com который использует учетные записи на site.com. Если пользователь авторизуется на site.com, он должен остаться авторизованном, когда переходить на music.site.com. И обратно тоже.
Было бы хорошо, если ответите исходя из возможностей PHP.

Botirbek Samandarov
19.03.2009, 14:46
Попробуй с одним скриптом для проверки user на сайте или нет.
Точнее, у тебя на сайте site.com auth.php проверяет авторизацию, если все ОК, активизирует user'а и запускает session. и когда user обращается на music.site.com используешь session на auth.php

elf
19.03.2009, 15:26
Попробуй с одним скриптом для проверки user на сайте или нет.
Точнее, у тебя на сайте site.com auth.php проверяет авторизацию, если все ОК, активизирует user'а и запускает session. и когда user обращается на music.site.com используешь session на auth.php
Например, пользователь авторизован на сайте site.com. C помощью ссылки он переходить на music.site.com. Откуда знает auth.php кого проверить, то есть откуда получаеть переменные о user?

Aleph
19.03.2009, 16:28
Откуда знает auth.php кого проверить, то есть откуда получаеть переменные о user?
Он умный, он догадается…

elf
19.03.2009, 16:50
А что, никто не столкнулся с такой задачой? Странно...

Timur Naimov
19.03.2009, 18:16
А что, никто не столкнулся с такой задачой? Странно...
На ASP.NET решается достаточно просто, более того можно использовать web аутентификацию для windows приложений. Про PHP не знаю...

Artur Alikulov
19.03.2009, 20:13
Откуда знает auth.php кого проверить, то есть откуда получаеть переменные о user?
А сессионные переменный нынче не в моде?

German Stimban
19.03.2009, 20:57
Можно использовать sessionid, можно использовать hidden поля, передаваемые POST'ом или GET'ом

shumbola
19.03.2009, 22:24
elf,

Вам советую прочитать документацию PHP относительно сессии. Одним из способов (наиболее распространено) поддержки сессия является куки (cookie). Так вот, при авторизации (независимо на site.com или music.site.com) создайте куки на .site.com (не site.com или music.site.com!) и voila, задача решена.

P.S. Ваша задача проверить то что я здесь описал, и доложить о результате. Если память мне не изменяеть я про это писал в связи с авторизацией на uforum.uz и www.uforum.uz, поищите.

elf
20.03.2009, 08:19
Спасибо всем!
Куки и сессия еще в моде, я тоже планирую решить задачу с ними. Проблема в том, что если сайт music.site.com на другом серваке, тогда он не сможеть получить куки сайта site.com. Или не так? Я еще не проверил. Можеть система позволяеть поддоменным сайтам получить куки их "родителей", хотя они другом серваке?

Artur Alikulov
20.03.2009, 09:16
Куки и сессия еще в моде, я тоже планирую решить задачу с ними. Проблема в том, что если сайт music.site.com на другом серваке, тогда он не сможеть получить куки сайта site.com. Или не так? Я еще не проверил. Можеть система позволяеть поддоменным сайтам получить куки их "родителей", хотя они другом серваке?
Куки создаются на стороне клиента и не важно на каких серваках будут находиться сайты.

Timur Naimov
20.03.2009, 10:27
Куки создаются на стороне клиента и не важно на каких серваках будут находиться сайты.
Маленькое уточнение из MSDN ;)


Limiting Cookies to a Folder or Application
To limit cookies to a folder on the server, set the cookie's Path property, as in the following example:

Visual Basic Copy Code
Dim appCookie As New HttpCookie("AppCookie")
appCookie.Value = "written " & DateTime.Now.ToString()
appCookie.Expires = DateTime.Now.AddDays(1)
appCookie.Path = "/Application1"
Response.Cookies.Add(appCookie)

C# Copy Code
HttpCookie appCookie = new HttpCookie("AppCookie");
appCookie.Value = "written " + DateTime.Now.ToString();
appCookie.Expires = DateTime.Now.AddDays(1);
appCookie.Path = "/Application1";
Response.Cookies.Add(appCookie);

Note:
You can also write cookies by adding them to the Cookies collection directly as shown in earlier examples.


The path can either be a physical path under the site root or a virtual root. The effect will be that the cookie is available only to pages in the Application1 folder or virtual root. For example, if your site is called www.contoso.com, the cookie created in the previous example will be available to pages with the path http://www.contoso.com/Application1/ and to any pages beneath that folder. However, the cookie will not be available to pages in other applications such as http://www.contoso.com/Application2/ or just http://www.contoso.com/.

Note:
In some browsers, the path is case sensitive. You cannot control how users type URLs into their browsers, but if your application depends on cookies tied to a specific path, be sure that the URLs in any hyperlinks you create match the case of the Path property value.


Limiting Cookie Domain Scope
By default, cookies are associated with a specific domain. For example, if your site is www.contoso.com, the cookies you write are sent to the server when users request any page from that site. (This might not include cookies with a specific path value.) If your site has subdomains—for example, contoso.com, sales.contoso.com, and support.contoso.com—then you can associate cookies with a specific subdomain. To do so, set the cookie's Domain property, as in this example:

Visual Basic Copy Code
Response.Cookies("domain").Value = DateTime.Now.ToString()
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "support.contoso.com"

C# Copy Code
Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["domain"].Domain = "support.contoso.com";


When the domain is set in this way, the cookie will be available only to pages in the specified subdomain. You can also use the Domain property to create a cookie that can be shared among multiple subdomains, as shown in the following example:

Visual Basic Copy Code
Response.Cookies("domain").Value = DateTime.Now.ToString()
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "contoso.com"

C# Copy Code
Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["domain"].Domain = "contoso.com";


The cookie will then be available to the primary domain as well as to sales.contoso.com and support.contoso.com domains.

Artur Alikulov
20.03.2009, 10:40
Маленькое уточнение из MSDN
Не пугай топикстартера MSDN'ом ;) Он на ПХП пишет, хотя и там уверен есть возможность ограничения использования куков субдоменами и т.д.

Timur Naimov
20.03.2009, 11:09
Не пугай топикстартера MSDN'ом Он на ПХП пишет, хотя и там уверен есть возможность ограничения использования куков субдоменами и т.д.
Это я к тому, что надо пользоваться "правильными" технологиями :) (сейчас тапками закидают...)

DarkUser
20.03.2009, 12:10
Это я к тому, что надо пользоваться "правильными" технологиями
в IT среде принято сначала мозгами пользоваться, а потом уже технологиями :)

elf
20.03.2009, 13:24
Куки и сессия еще в моде, я тоже планирую решить задачу с ними. Проблема в том, что если сайт music.site.com на другом серваке, тогда он не сможеть получить куки сайта site.com. Или не так? Я еще не проверил. Можеть система позволяеть поддоменным сайтам получить куки их "родителей", хотя они другом серваке?
Куки создаются на стороне клиента и не важно на каких серваках будут находиться сайты.

Итак, Вы предлаете создать куки с ограничениями домена (конечно данные храниться в зашифрованном виде). То есть куку установим в виде
setcookie("name", $value, "", ".site.com");
Лишь этого достаточно? И как будет по мере безопасности?