-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdjango-multidoamin-sessions.html
More file actions
224 lines (186 loc) · 9.95 KB
/
django-multidoamin-sessions.html
File metadata and controls
224 lines (186 loc) · 9.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
<!DOCTYPE html>
<!--[if IE 8 ]><html class="ie ie8" lang="ru"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="ru">
<!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="author" content="Косолапов Дмитрий">
<meta name="google-site-verification" content="yJ35ns77j5pUPUutyBdAd5CwjqK3TGn5prTlyf2LlSo">
<title>Косолапов Дмитрий: мысли умные и не только. - Мультидоменные сессии для джанго</title>
<link href="https://dicos.ru/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Косолапов Дмитрий: мысли умные и не только. Full Atom Feed" />
<link href="https://dicos.ru/feeds/all.rss.xml" type="application/rss+xml" rel="alternate" title="Косолапов Дмитрий: мысли умные и не только. Full RSS Feed" />
<!-- CSS -->
<link rel="stylesheet" href="https://dicos.ru/theme/css/style.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="https://dicos.ru/theme/css/colors/blue.css" id="colors">
<!-- Code highlight color scheme -->
<link href="https://dicos.ru/theme/css/code_blocks/darkly.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<meta property="og:locale" content="">
<meta property="og:site_name" content="Косолапов Дмитрий: мысли умные и не только.">
<meta property="og:type" content="article">
<meta property="article:author" content="">
<meta property="og:url" content="https://dicos.ru/django-multidoamin-sessions.html">
<meta property="og:title" content="Мультидоменные сессии для джанго">
<meta property="og:description" content="">
<meta property="og:image" content="https://dicos.ru/images/guilherme-toti.jpg">
<meta property="article:published_time" content="2017-01-23 15:15:00+07:00">
</head>
<body>
<header id="header">
<!-- Container -->
<div class="container">
<!-- Logo / Mobile Menu -->
<div class="nine.columns columns">
<div id="logo">
<h1><a href="https://dicos.ru/">Косолапов Дмитрий: мысли умные и не только.</a></h1>
</div>
</div>
<!-- Navigation
================================================== -->
<div class="seven columns">
<nav id="navigation" class="menu">
<ul id="responsive">
<li><a href="https://dicos.ru/">Главная</a></li>
<li><a href="https://dicos.ru/about.html">Обо мне</a></li>
</ul>
</nav>
</div>
</div>
<!-- Container / End -->
</header>
<!-- Header / End -->
<div id="content-wrapper">
<section id="titlebar">
<!-- Container -->
<div class="container">
<div class="sixteen columns">
<nav id="breadcrumbs">
<ul>
<li>Текущее нахождение:</li>
<li><a href="https://dicos.ru/">Главная</a></li>
<li><a href="https://dicos.ru/category/django.html">django</a></li>
<li>Мультидоменные сессии для джанго</li>
</ul>
</nav>
</div>
</div>
<!-- Container / End -->
</section>
<div class="container">
<div class="twelve alt columns">
<article class="post" style="margin: 0; border: 0;">
<section class="post-content">
<header class="meta">
<h2><a href="https://dicos.ru/django-multidoamin-sessions.html">Мультидоменные сессии для джанго</a></h2>
<ul>
<li>By <a href="https://dicos.ru/author/admin.html">admin</a></li>
<li>Пн 23 Январь 2017</li>
</ul>
</header>
<div class="section" id="id2">
<h2>1. Для чего нужно и в чем проблема</h2>
<p>Допустим, у нас есть интернет-магазин shop.ru. Начальство решает купить домен shop.com для выхода на международный рынок.
В интернет-магазине есть регистрация, вход по логину-паролю. Есть много ссылок на страницы shop.ru. Допустим, посетитель
зарегистрировался на shop.com, положил товар в корзину, потом как-то перешел на страницу shop.ru. Его корзина будет пуста
и этому человеку заново нужно будет вводить логин и пароль. В идеале нужно, чтобы независимо с какого сайта на какой
перешел посетитель, нужно, чтобы содержимое корзины и данные автоизации сохранились.</p>
<p>Проблема в том, что такая информация как авторизирован человек на сайте или нет, какие товары он положил в корзину
хранятся в сессии. А сессия работает на файлах cookie, которые из-за политики безопасности веб-браузеров жестко привязаны
к домену. То есть файл cookie для домена shop.ru можно получить для субдомена product.shop.ru, но нельзя для shop.com.</p>
</div>
<div class="section" id="id3">
<h2>2. Существующие решения</h2>
<p># <a class="reference external" href="https://github.com/dicos/django-xsession">django-xsession</a>
# <a class="reference external" href="https://github.com/dicos/django-shared-session">django-shared-session</a></p>
<div class="section" id="django-xsession">
<h3>django-xsession</h3>
<p>Принцип этой библиотеки построен на том, что если на текущем сайте пользователь не авторизирован, а на другом
авторизирован, то с другого сайта загружается javascript код, который создает файл cookie-сессию с таким же
идентификатором, как на авторизированном сайте.</p>
<p>Из достоинства хочу отметить простоту самого модуля. Недостаток: могут быть "вечные" перезагрузки если сессия была
как-то установлена на обоих сайтах.</p>
</div>
<div class="section" id="django-shared-session">
<h3>django-shared-session</h3>
<p>Эта библиотека работает по обратному принципу: на сайте, где авторизовался пользователь загружается javascript с других
сайтов. При этом в get запросе передается шифрованная информация о текущей сессии. Эта шифрованная информация
расшифровывается на серверах других сайтов, и для этих сайтов устанавливается сессия.</p>
<p>Приятная библиотека. Работает стабильно.</p>
</div>
</div>
<div class="sharing">
</div>
<hr>
</section>
<div class="clearfix"></div>
</article>
</div>
<!-- Sidebar -->
<div class="four columns">
</div>
</div>
<!-- Container / End -->
</div>
<!-- Content Wrapper / End -->
<div id="footer-bottom">
<!-- Container -->
<div class="container">
<div class="eight columns">Blog powered by <a href="http://getpelican.com">Pelican</a></div>
<div class="eight columns">
<ul class="social-icons-footer">
<li>
<a href="#" class="tooltip top" title="You can add links in your config file">
<i class="icon-you can add links in your config file"></i>
</a>
</li>
<li>
<a href="#" class="tooltip top" title="Another social link">
<i class="icon-another social link"></i>
</a>
</li>
<li><a href="https://dicos.ru/feeds/all.atom.xml" class="tooltip top" title="RSS"><i class="icon-rss"></i></a></li>
</ul>
</div>
</div>
<!-- Container / End -->
</div>
<!-- Footer Bottom / End -->
<!-- Javascripts -->
<script src="https://dicos.ru/theme/js/jquery.min.js"></script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter14462131 = new Ya.Metrika({
id:14462131,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = "https://mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/14462131" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --> </body>
</html>