Commit | Line | Data |
---|---|---|
9aa5da67 WG |
1 | |
2 | <!doctype html> | |
3 | <html lang="en" class="no-js"> | |
4 | <head> | |
5 | ||
6 | <meta charset="utf-8"> | |
7 | <meta name="viewport" content="width=device-width,initial-scale=1"> | |
8 | ||
9 | ||
10 | ||
11 | <link rel="canonical" href="https://docs.woltlab.com/6.0/migration/wsc53/session/"> | |
12 | ||
e02609d6 WG |
13 | |
14 | <link rel="prev" href="../php/"> | |
15 | ||
16 | ||
17 | <link rel="next" href="../javascript/"> | |
18 | ||
9aa5da67 | 19 | <link rel="icon" href="../../../assets/default.favicon.ico"> |
9d185e89 | 20 | <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15"> |
9aa5da67 WG |
21 | |
22 | ||
23 | ||
24 | <title>Session Handling and Authentication - WoltLab Suite Documentation</title> | |
25 | ||
26 | ||
27 | ||
9d185e89 | 28 | <link rel="stylesheet" href="../../../assets/stylesheets/main.26e3688c.min.css"> |
9aa5da67 WG |
29 | |
30 | ||
9d185e89 | 31 | <link rel="stylesheet" href="../../../assets/stylesheets/palette.ecc896b0.min.css"> |
9aa5da67 WG |
32 | |
33 | ||
7f9945cf | 34 | |
9aa5da67 WG |
35 | |
36 | ||
37 | ||
38 | ||
39 | ||
40 | ||
41 | <link rel="stylesheet" href="../../../stylesheets/extra.css"> | |
42 | ||
a06fd3b1 | 43 | <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> |
9aa5da67 WG |
44 | |
45 | ||
46 | ||
47 | ||
48 | ||
7f9945cf | 49 | |
9aa5da67 WG |
50 | </head> |
51 | ||
52 | ||
53 | ||
54 | ||
55 | ||
56 | ||
57 | ||
94fa7b1e | 58 | <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="indigo"> |
9aa5da67 WG |
59 | |
60 | ||
61 | ||
62 | <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> | |
63 | <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> | |
64 | <label class="md-overlay" for="__drawer"></label> | |
65 | <div data-md-component="skip"> | |
66 | ||
67 | ||
68 | <a href="#migrating-from-woltlab-suite-53-session-handling-and-authentication" class="md-skip"> | |
69 | Skip to content | |
70 | </a> | |
71 | ||
72 | </div> | |
73 | <div data-md-component="announce"> | |
74 | ||
75 | <aside class="md-banner"> | |
76 | <div class="md-banner__inner md-grid md-typeset"> | |
77 | ||
a06fd3b1 | 78 | |
9aa5da67 WG |
79 | <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a> |
80 | ||
81 | </div> | |
a06fd3b1 | 82 | |
9aa5da67 WG |
83 | </aside> |
84 | ||
85 | </div> | |
86 | ||
6f2e8f13 | 87 | <div data-md-color-scheme="default" data-md-component="outdated" hidden> |
a06fd3b1 | 88 | |
9aa5da67 WG |
89 | </div> |
90 | ||
91 | ||
92 | ||
93 | ||
781975eb WG |
94 | |
95 | ||
96 | <header class="md-header md-header--shadow" data-md-component="header"> | |
9aa5da67 WG |
97 | <nav class="md-header__inner md-grid" aria-label="Header"> |
98 | <a href="../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo"> | |
99 | ||
100 | <img src="../../../assets/logo.png" alt="logo"> | |
101 | ||
102 | </a> | |
103 | <label class="md-header__button md-icon" for="__drawer"> | |
104 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> | |
105 | </label> | |
106 | <div class="md-header__title" data-md-component="header-title"> | |
107 | <div class="md-header__ellipsis"> | |
108 | <div class="md-header__topic"> | |
109 | <span class="md-ellipsis"> | |
110 | WoltLab Suite Documentation | |
111 | </span> | |
112 | </div> | |
113 | <div class="md-header__topic" data-md-component="header-topic"> | |
114 | <span class="md-ellipsis"> | |
115 | ||
116 | Session Handling and Authentication | |
117 | ||
118 | </span> | |
119 | </div> | |
120 | </div> | |
121 | </div> | |
122 | ||
94fa7b1e WG |
123 | |
124 | ||
9aa5da67 WG |
125 | |
126 | ||
127 | <label class="md-header__button md-icon" for="__search"> | |
128 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> | |
129 | </label> | |
130 | <div class="md-search" data-md-component="search" role="dialog"> | |
131 | <label class="md-search__overlay" for="__search"></label> | |
132 | <div class="md-search__inner" role="search"> | |
133 | <form class="md-search__form" name="search"> | |
134 | <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> | |
135 | <label class="md-search__icon md-icon" for="__search"> | |
136 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> | |
137 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> | |
138 | </label> | |
139 | <nav class="md-search__options" aria-label="Search"> | |
140 | ||
7f9945cf | 141 | <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> |
9aa5da67 WG |
142 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> |
143 | </button> | |
144 | </nav> | |
145 | ||
146 | </form> | |
147 | <div class="md-search__output"> | |
148 | <div class="md-search__scrollwrap" data-md-scrollfix> | |
149 | <div class="md-search-result" data-md-component="search-result"> | |
150 | <div class="md-search-result__meta"> | |
151 | Initializing search | |
152 | </div> | |
7b2c751c | 153 | <ol class="md-search-result__list" role="presentation"></ol> |
9aa5da67 WG |
154 | </div> |
155 | </div> | |
156 | </div> | |
157 | </div> | |
158 | </div> | |
159 | ||
160 | ||
161 | <div class="md-header__source"> | |
162 | <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source"> | |
163 | <div class="md-source__icon md-icon"> | |
164 | ||
94fa7b1e | 165 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> |
9aa5da67 WG |
166 | </div> |
167 | <div class="md-source__repository"> | |
168 | GitHub | |
169 | </div> | |
170 | </a> | |
171 | </div> | |
172 | ||
173 | </nav> | |
174 | ||
175 | </header> | |
176 | ||
177 | <div class="md-container" data-md-component="container"> | |
178 | ||
179 | ||
180 | ||
181 | ||
182 | ||
183 | ||
184 | <main class="md-main" data-md-component="main"> | |
185 | <div class="md-main__inner md-grid"> | |
186 | ||
187 | ||
188 | ||
189 | <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > | |
190 | <div class="md-sidebar__scrollwrap"> | |
191 | <div class="md-sidebar__inner"> | |
192 | ||
193 | ||
194 | ||
195 | <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> | |
196 | <label class="md-nav__title" for="__drawer"> | |
197 | <a href="../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo"> | |
198 | ||
199 | <img src="../../../assets/logo.png" alt="logo"> | |
200 | ||
201 | </a> | |
202 | WoltLab Suite Documentation | |
203 | </label> | |
204 | ||
205 | <div class="md-nav__source"> | |
206 | <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source"> | |
207 | <div class="md-source__icon md-icon"> | |
208 | ||
94fa7b1e | 209 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> |
9aa5da67 WG |
210 | </div> |
211 | <div class="md-source__repository"> | |
212 | GitHub | |
213 | </div> | |
214 | </a> | |
215 | </div> | |
216 | ||
217 | <ul class="md-nav__list" data-md-scrollfix> | |
218 | ||
219 | ||
220 | ||
221 | ||
222 | ||
223 | ||
224 | ||
225 | ||
226 | <li class="md-nav__item"> | |
227 | <a href="../../../getting-started/" class="md-nav__link"> | |
228 | Getting Started | |
229 | </a> | |
230 | </li> | |
231 | ||
232 | ||
233 | ||
234 | ||
235 | ||
236 | ||
237 | ||
238 | ||
239 | ||
240 | ||
241 | ||
242 | <li class="md-nav__item md-nav__item--nested"> | |
243 | ||
244 | ||
9aa5da67 WG |
245 | |
246 | ||
51b70eee | 247 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > |
e02609d6 | 248 | |
9aa5da67 WG |
249 | |
250 | ||
51b70eee | 251 | <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> |
9aa5da67 WG |
252 | PHP API |
253 | <span class="md-nav__icon md-icon"></span> | |
254 | </label> | |
255 | ||
51b70eee | 256 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> |
9aa5da67 WG |
257 | <label class="md-nav__title" for="__nav_2"> |
258 | <span class="md-nav__icon md-icon"></span> | |
259 | PHP API | |
260 | </label> | |
261 | <ul class="md-nav__list" data-md-scrollfix> | |
262 | ||
263 | ||
264 | ||
265 | ||
266 | ||
267 | ||
268 | <li class="md-nav__item"> | |
269 | <a href="../../../php/pages/" class="md-nav__link"> | |
270 | Pages | |
271 | </a> | |
272 | </li> | |
273 | ||
274 | ||
275 | ||
276 | ||
277 | ||
278 | ||
279 | ||
280 | ||
281 | ||
282 | <li class="md-nav__item"> | |
283 | <a href="../../../php/database-objects/" class="md-nav__link"> | |
284 | Database Objects | |
285 | </a> | |
286 | </li> | |
287 | ||
288 | ||
289 | ||
290 | ||
291 | ||
292 | ||
293 | ||
294 | ||
295 | ||
296 | <li class="md-nav__item"> | |
297 | <a href="../../../php/database-access/" class="md-nav__link"> | |
298 | Database Access | |
299 | </a> | |
300 | </li> | |
301 | ||
302 | ||
303 | ||
304 | ||
305 | ||
306 | ||
307 | ||
308 | ||
309 | ||
310 | <li class="md-nav__item"> | |
311 | <a href="../../../php/exceptions/" class="md-nav__link"> | |
312 | Exceptions | |
313 | </a> | |
314 | </li> | |
315 | ||
316 | ||
317 | ||
318 | ||
319 | ||
320 | ||
321 | ||
322 | ||
323 | ||
324 | ||
325 | <li class="md-nav__item md-nav__item--nested"> | |
326 | ||
327 | ||
9aa5da67 WG |
328 | |
329 | ||
51b70eee | 330 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" > |
e02609d6 | 331 | |
9aa5da67 WG |
332 | |
333 | ||
51b70eee | 334 | <label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0"> |
9aa5da67 WG |
335 | API |
336 | <span class="md-nav__icon md-icon"></span> | |
337 | </label> | |
338 | ||
51b70eee | 339 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false"> |
9aa5da67 WG |
340 | <label class="md-nav__title" for="__nav_2_5"> |
341 | <span class="md-nav__icon md-icon"></span> | |
342 | API | |
343 | </label> | |
344 | <ul class="md-nav__list" data-md-scrollfix> | |
345 | ||
346 | ||
347 | ||
348 | ||
349 | ||
350 | ||
351 | ||
352 | <li class="md-nav__item md-nav__item--nested"> | |
353 | ||
354 | ||
9aa5da67 WG |
355 | |
356 | ||
51b70eee | 357 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_1" > |
9aa5da67 WG |
358 | |
359 | ||
e02609d6 | 360 | |
51b70eee | 361 | <label class="md-nav__link" for="__nav_2_5_1" id="__nav_2_5_1_label" tabindex="0"> |
9aa5da67 WG |
362 | Caches |
363 | <span class="md-nav__icon md-icon"></span> | |
364 | </label> | |
365 | ||
51b70eee | 366 | <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_1_label" aria-expanded="false"> |
9aa5da67 WG |
367 | <label class="md-nav__title" for="__nav_2_5_1"> |
368 | <span class="md-nav__icon md-icon"></span> | |
369 | Caches | |
370 | </label> | |
371 | <ul class="md-nav__list" data-md-scrollfix> | |
372 | ||
373 | ||
374 | ||
375 | ||
376 | ||
377 | ||
378 | <li class="md-nav__item"> | |
379 | <a href="../../../php/api/caches/" class="md-nav__link"> | |
380 | Overview | |
381 | </a> | |
382 | </li> | |
383 | ||
384 | ||
385 | ||
386 | ||
387 | ||
388 | ||
389 | ||
390 | ||
391 | ||
392 | <li class="md-nav__item"> | |
393 | <a href="../../../php/api/caches_persistent-caches/" class="md-nav__link"> | |
394 | Persistent Caches | |
395 | </a> | |
396 | </li> | |
397 | ||
398 | ||
399 | ||
400 | ||
401 | ||
402 | ||
403 | ||
404 | ||
405 | ||
406 | <li class="md-nav__item"> | |
407 | <a href="../../../php/api/caches_runtime-caches/" class="md-nav__link"> | |
408 | Runtime Caches | |
409 | </a> | |
410 | </li> | |
411 | ||
412 | ||
413 | ||
414 | ||
415 | </ul> | |
416 | </nav> | |
417 | </li> | |
418 | ||
419 | ||
420 | ||
421 | ||
422 | ||
423 | ||
424 | ||
425 | ||
426 | ||
427 | <li class="md-nav__item"> | |
428 | <a href="../../../php/api/comments/" class="md-nav__link"> | |
429 | Comments | |
430 | </a> | |
431 | </li> | |
432 | ||
433 | ||
434 | ||
435 | ||
436 | ||
437 | ||
438 | ||
439 | ||
440 | ||
441 | <li class="md-nav__item"> | |
442 | <a href="../../../php/api/cronjobs/" class="md-nav__link"> | |
443 | Cronjobs | |
444 | </a> | |
445 | </li> | |
446 | ||
447 | ||
448 | ||
449 | ||
450 | ||
451 | ||
452 | ||
453 | ||
454 | ||
455 | <li class="md-nav__item"> | |
456 | <a href="../../../php/api/events/" class="md-nav__link"> | |
457 | Events | |
458 | </a> | |
459 | </li> | |
460 | ||
461 | ||
462 | ||
463 | ||
464 | ||
465 | ||
466 | ||
467 | ||
468 | ||
469 | ||
470 | <li class="md-nav__item md-nav__item--nested"> | |
471 | ||
472 | ||
9aa5da67 WG |
473 | |
474 | ||
51b70eee | 475 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_5" > |
e02609d6 | 476 | |
9aa5da67 WG |
477 | |
478 | ||
51b70eee | 479 | <label class="md-nav__link" for="__nav_2_5_5" id="__nav_2_5_5_label" tabindex="0"> |
9aa5da67 WG |
480 | Form Builder |
481 | <span class="md-nav__icon md-icon"></span> | |
482 | </label> | |
483 | ||
51b70eee | 484 | <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_5_label" aria-expanded="false"> |
9aa5da67 WG |
485 | <label class="md-nav__title" for="__nav_2_5_5"> |
486 | <span class="md-nav__icon md-icon"></span> | |
487 | Form Builder | |
488 | </label> | |
489 | <ul class="md-nav__list" data-md-scrollfix> | |
490 | ||
491 | ||
492 | ||
493 | ||
494 | ||
495 | ||
496 | <li class="md-nav__item"> | |
497 | <a href="../../../php/api/form_builder/overview/" class="md-nav__link"> | |
498 | Overview | |
499 | </a> | |
500 | </li> | |
501 | ||
502 | ||
503 | ||
504 | ||
505 | ||
506 | ||
507 | ||
508 | ||
509 | ||
510 | <li class="md-nav__item"> | |
511 | <a href="../../../php/api/form_builder/structure/" class="md-nav__link"> | |
512 | Structure | |
513 | </a> | |
514 | </li> | |
515 | ||
516 | ||
517 | ||
518 | ||
519 | ||
520 | ||
521 | ||
522 | ||
523 | ||
524 | <li class="md-nav__item"> | |
525 | <a href="../../../php/api/form_builder/form_fields/" class="md-nav__link"> | |
526 | Fields | |
527 | </a> | |
528 | </li> | |
529 | ||
530 | ||
531 | ||
532 | ||
533 | ||
534 | ||
535 | ||
536 | ||
537 | ||
538 | <li class="md-nav__item"> | |
539 | <a href="../../../php/api/form_builder/validation_data/" class="md-nav__link"> | |
540 | Validation and Data | |
541 | </a> | |
542 | </li> | |
543 | ||
544 | ||
545 | ||
546 | ||
547 | ||
548 | ||
549 | ||
550 | ||
551 | ||
552 | <li class="md-nav__item"> | |
553 | <a href="../../../php/api/form_builder/dependencies/" class="md-nav__link"> | |
554 | Dependencies | |
555 | </a> | |
556 | </li> | |
557 | ||
558 | ||
559 | ||
560 | ||
561 | </ul> | |
562 | </nav> | |
563 | </li> | |
564 | ||
565 | ||
566 | ||
567 | ||
568 | ||
569 | ||
570 | ||
571 | ||
572 | ||
573 | <li class="md-nav__item"> | |
574 | <a href="../../../php/api/package_installation_plugins/" class="md-nav__link"> | |
575 | Package Installation Plugins | |
576 | </a> | |
577 | </li> | |
578 | ||
579 | ||
580 | ||
581 | ||
582 | ||
583 | ||
584 | ||
585 | ||
586 | ||
587 | <li class="md-nav__item"> | |
588 | <a href="../../../php/api/user_activity_points/" class="md-nav__link"> | |
589 | User Activity Points | |
590 | </a> | |
591 | </li> | |
592 | ||
593 | ||
594 | ||
595 | ||
596 | ||
597 | ||
598 | ||
599 | ||
600 | ||
601 | <li class="md-nav__item"> | |
602 | <a href="../../../php/api/user_notifications/" class="md-nav__link"> | |
603 | User Notifications | |
604 | </a> | |
605 | </li> | |
606 | ||
607 | ||
608 | ||
609 | ||
610 | ||
611 | ||
612 | ||
613 | ||
614 | ||
615 | <li class="md-nav__item"> | |
616 | <a href="../../../php/api/sitemaps/" class="md-nav__link"> | |
617 | Sitemaps | |
618 | </a> | |
619 | </li> | |
620 | ||
621 | ||
622 | ||
623 | ||
624 | </ul> | |
625 | </nav> | |
626 | </li> | |
627 | ||
628 | ||
629 | ||
630 | ||
631 | ||
632 | ||
633 | ||
634 | ||
635 | ||
636 | <li class="md-nav__item"> | |
637 | <a href="../../../php/code-style/" class="md-nav__link"> | |
638 | Code Style | |
639 | </a> | |
640 | </li> | |
641 | ||
642 | ||
643 | ||
644 | ||
645 | ||
646 | ||
647 | ||
648 | ||
649 | ||
650 | <li class="md-nav__item"> | |
651 | <a href="../../../php/apps/" class="md-nav__link"> | |
652 | Apps | |
653 | </a> | |
654 | </li> | |
655 | ||
656 | ||
657 | ||
658 | ||
659 | ||
660 | ||
661 | ||
662 | ||
663 | ||
664 | <li class="md-nav__item"> | |
665 | <a href="../../../php/gdpr/" class="md-nav__link"> | |
666 | GDPR | |
667 | </a> | |
668 | </li> | |
669 | ||
670 | ||
671 | ||
672 | ||
673 | </ul> | |
674 | </nav> | |
675 | </li> | |
676 | ||
677 | ||
678 | ||
679 | ||
680 | ||
681 | ||
682 | ||
683 | ||
684 | ||
685 | ||
686 | ||
687 | <li class="md-nav__item md-nav__item--nested"> | |
688 | ||
689 | ||
9aa5da67 WG |
690 | |
691 | ||
51b70eee | 692 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > |
e02609d6 | 693 | |
9aa5da67 WG |
694 | |
695 | ||
51b70eee | 696 | <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> |
9aa5da67 WG |
697 | Languages, Templates & CSS |
698 | <span class="md-nav__icon md-icon"></span> | |
699 | </label> | |
700 | ||
51b70eee | 701 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> |
9aa5da67 WG |
702 | <label class="md-nav__title" for="__nav_3"> |
703 | <span class="md-nav__icon md-icon"></span> | |
704 | Languages, Templates & CSS | |
705 | </label> | |
706 | <ul class="md-nav__list" data-md-scrollfix> | |
707 | ||
708 | ||
709 | ||
710 | ||
711 | ||
712 | ||
713 | <li class="md-nav__item"> | |
714 | <a href="../../../view/languages/" class="md-nav__link"> | |
715 | Languages | |
716 | </a> | |
717 | </li> | |
718 | ||
719 | ||
720 | ||
721 | ||
722 | ||
723 | ||
724 | ||
725 | ||
726 | ||
727 | <li class="md-nav__item"> | |
728 | <a href="../../../view/templates/" class="md-nav__link"> | |
729 | Templates | |
730 | </a> | |
731 | </li> | |
732 | ||
733 | ||
734 | ||
735 | ||
736 | ||
737 | ||
738 | ||
739 | ||
740 | ||
3c22ac76 WG |
741 | <li class="md-nav__item"> |
742 | <a href="../../../view/template-modifiers/" class="md-nav__link"> | |
743 | Template Modifiers | |
744 | </a> | |
745 | </li> | |
746 | ||
747 | ||
748 | ||
749 | ||
750 | ||
751 | ||
752 | ||
753 | ||
754 | ||
9aa5da67 WG |
755 | <li class="md-nav__item"> |
756 | <a href="../../../view/template-plugins/" class="md-nav__link"> | |
757 | Template Plugins | |
758 | </a> | |
759 | </li> | |
760 | ||
761 | ||
762 | ||
763 | ||
764 | ||
765 | ||
766 | ||
767 | ||
768 | ||
769 | <li class="md-nav__item"> | |
770 | <a href="../../../view/css/" class="md-nav__link"> | |
771 | CSS | |
772 | </a> | |
773 | </li> | |
774 | ||
775 | ||
776 | ||
777 | ||
778 | </ul> | |
779 | </nav> | |
780 | </li> | |
781 | ||
782 | ||
783 | ||
784 | ||
785 | ||
786 | ||
787 | ||
788 | ||
789 | ||
790 | ||
791 | ||
792 | <li class="md-nav__item md-nav__item--nested"> | |
793 | ||
794 | ||
9aa5da67 WG |
795 | |
796 | ||
51b70eee | 797 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > |
9aa5da67 WG |
798 | |
799 | ||
e02609d6 | 800 | |
51b70eee | 801 | <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> |
9aa5da67 WG |
802 | TypeScript and JavaScript API |
803 | <span class="md-nav__icon md-icon"></span> | |
804 | </label> | |
805 | ||
51b70eee | 806 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> |
9aa5da67 WG |
807 | <label class="md-nav__title" for="__nav_4"> |
808 | <span class="md-nav__icon md-icon"></span> | |
809 | TypeScript and JavaScript API | |
810 | </label> | |
811 | <ul class="md-nav__list" data-md-scrollfix> | |
812 | ||
813 | ||
814 | ||
815 | ||
816 | ||
817 | ||
818 | <li class="md-nav__item"> | |
819 | <a href="../../../javascript/general-usage/" class="md-nav__link"> | |
820 | General Usage | |
821 | </a> | |
822 | </li> | |
823 | ||
824 | ||
825 | ||
826 | ||
827 | ||
828 | ||
829 | ||
830 | ||
831 | ||
832 | <li class="md-nav__item"> | |
833 | <a href="../../../javascript/typescript/" class="md-nav__link"> | |
834 | TypeScript | |
835 | </a> | |
836 | </li> | |
837 | ||
838 | ||
839 | ||
840 | ||
841 | ||
842 | ||
843 | ||
844 | ||
845 | ||
846 | ||
847 | <li class="md-nav__item md-nav__item--nested"> | |
848 | ||
849 | ||
9aa5da67 WG |
850 | |
851 | ||
51b70eee | 852 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > |
e02609d6 | 853 | |
9aa5da67 WG |
854 | |
855 | ||
51b70eee | 856 | <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> |
9f399714 WG |
857 | Components |
858 | <span class="md-nav__icon md-icon"></span> | |
859 | </label> | |
860 | ||
51b70eee | 861 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> |
9f399714 WG |
862 | <label class="md-nav__title" for="__nav_4_3"> |
863 | <span class="md-nav__icon md-icon"></span> | |
864 | Components | |
865 | </label> | |
866 | <ul class="md-nav__list" data-md-scrollfix> | |
867 | ||
868 | ||
869 | ||
870 | ||
871 | ||
872 | ||
873 | <li class="md-nav__item"> | |
874 | <a href="../../../javascript/components_confirmation/" class="md-nav__link"> | |
875 | Confirmation | |
876 | </a> | |
877 | </li> | |
878 | ||
879 | ||
880 | ||
881 | ||
882 | ||
883 | ||
884 | ||
885 | ||
886 | ||
887 | <li class="md-nav__item"> | |
888 | <a href="../../../javascript/components_dialog/" class="md-nav__link"> | |
889 | Dialog | |
890 | </a> | |
891 | </li> | |
892 | ||
893 | ||
894 | ||
895 | ||
f2d0508c WG |
896 | |
897 | ||
898 | ||
899 | ||
900 | ||
816a45a9 WG |
901 | <li class="md-nav__item"> |
902 | <a href="../../../javascript/components_google_maps/" class="md-nav__link"> | |
903 | Google Maps | |
904 | </a> | |
905 | </li> | |
906 | ||
907 | ||
908 | ||
909 | ||
910 | ||
911 | ||
912 | ||
913 | ||
914 | ||
f2d0508c WG |
915 | <li class="md-nav__item"> |
916 | <a href="../../../javascript/components_pagination/" class="md-nav__link"> | |
917 | Pagination | |
918 | </a> | |
919 | </li> | |
920 | ||
921 | ||
922 | ||
923 | ||
9f399714 WG |
924 | </ul> |
925 | </nav> | |
926 | </li> | |
927 | ||
928 | ||
929 | ||
930 | ||
931 | ||
932 | ||
933 | ||
934 | ||
935 | ||
936 | ||
937 | <li class="md-nav__item md-nav__item--nested"> | |
938 | ||
939 | ||
9f399714 WG |
940 | |
941 | ||
51b70eee | 942 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > |
9f399714 WG |
943 | |
944 | ||
e02609d6 | 945 | |
51b70eee | 946 | <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> |
9aa5da67 WG |
947 | New API |
948 | <span class="md-nav__icon md-icon"></span> | |
949 | </label> | |
950 | ||
51b70eee | 951 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> |
9f399714 | 952 | <label class="md-nav__title" for="__nav_4_4"> |
9aa5da67 WG |
953 | <span class="md-nav__icon md-icon"></span> |
954 | New API | |
955 | </label> | |
956 | <ul class="md-nav__list" data-md-scrollfix> | |
957 | ||
958 | ||
959 | ||
960 | ||
961 | ||
962 | ||
963 | <li class="md-nav__item"> | |
964 | <a href="../../../javascript/new-api_writing-a-module/" class="md-nav__link"> | |
965 | Writing a module | |
966 | </a> | |
967 | </li> | |
968 | ||
969 | ||
970 | ||
971 | ||
972 | ||
973 | ||
974 | ||
975 | ||
976 | ||
9aa5da67 WG |
977 | <li class="md-nav__item"> |
978 | <a href="../../../javascript/new-api_core/" class="md-nav__link"> | |
979 | Core Functions | |
980 | </a> | |
981 | </li> | |
982 | ||
983 | ||
984 | ||
985 | ||
986 | ||
987 | ||
988 | ||
989 | ||
990 | ||
991 | <li class="md-nav__item"> | |
992 | <a href="../../../javascript/new-api_dom/" class="md-nav__link"> | |
993 | DOM | |
994 | </a> | |
995 | </li> | |
996 | ||
997 | ||
998 | ||
999 | ||
1000 | ||
1001 | ||
1002 | ||
1003 | ||
1004 | ||
1005 | <li class="md-nav__item"> | |
1006 | <a href="../../../javascript/new-api_events/" class="md-nav__link"> | |
1007 | Event Handling | |
1008 | </a> | |
1009 | </li> | |
1010 | ||
1011 | ||
1012 | ||
1013 | ||
1014 | ||
1015 | ||
1016 | ||
1017 | ||
1018 | ||
1019 | <li class="md-nav__item"> | |
1020 | <a href="../../../javascript/new-api_ajax/" class="md-nav__link"> | |
1021 | Ajax | |
1022 | </a> | |
1023 | </li> | |
1024 | ||
1025 | ||
1026 | ||
1027 | ||
1028 | ||
1029 | ||
1030 | ||
1031 | ||
1032 | ||
1033 | <li class="md-nav__item"> | |
1034 | <a href="../../../javascript/new-api_dialogs/" class="md-nav__link"> | |
1035 | Dialogs | |
1036 | </a> | |
1037 | </li> | |
1038 | ||
1039 | ||
1040 | ||
1041 | ||
1042 | ||
1043 | ||
1044 | ||
1045 | ||
1046 | ||
1047 | <li class="md-nav__item"> | |
1048 | <a href="../../../javascript/new-api_browser/" class="md-nav__link"> | |
1049 | Browser and Screen Sizes | |
1050 | </a> | |
1051 | </li> | |
1052 | ||
1053 | ||
1054 | ||
1055 | ||
1056 | ||
1057 | ||
1058 | ||
1059 | ||
1060 | ||
1061 | <li class="md-nav__item"> | |
1062 | <a href="../../../javascript/new-api_ui/" class="md-nav__link"> | |
1063 | User Interface | |
1064 | </a> | |
1065 | </li> | |
1066 | ||
1067 | ||
1068 | ||
1069 | ||
1070 | </ul> | |
1071 | </nav> | |
1072 | </li> | |
1073 | ||
1074 | ||
1075 | ||
1076 | ||
1077 | ||
1078 | ||
1079 | ||
1080 | ||
1081 | ||
1082 | <li class="md-nav__item"> | |
1083 | <a href="../../../javascript/legacy-api/" class="md-nav__link"> | |
1084 | Legacy API | |
1085 | </a> | |
1086 | </li> | |
1087 | ||
1088 | ||
1089 | ||
1090 | ||
1091 | ||
1092 | ||
1093 | ||
1094 | ||
1095 | ||
9aa5da67 WG |
1096 | <li class="md-nav__item"> |
1097 | <a href="../../../javascript/code-snippets/" class="md-nav__link"> | |
1098 | Code Snippets | |
1099 | </a> | |
1100 | </li> | |
1101 | ||
1102 | ||
1103 | ||
1104 | ||
1105 | </ul> | |
1106 | </nav> | |
1107 | </li> | |
1108 | ||
1109 | ||
1110 | ||
1111 | ||
1112 | ||
1113 | ||
1114 | ||
1115 | ||
1116 | ||
1117 | ||
1118 | ||
1119 | <li class="md-nav__item md-nav__item--nested"> | |
1120 | ||
1121 | ||
9aa5da67 WG |
1122 | |
1123 | ||
51b70eee | 1124 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > |
e02609d6 | 1125 | |
9aa5da67 WG |
1126 | |
1127 | ||
51b70eee | 1128 | <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> |
9aa5da67 WG |
1129 | Package Components |
1130 | <span class="md-nav__icon md-icon"></span> | |
1131 | </label> | |
1132 | ||
51b70eee | 1133 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> |
9aa5da67 WG |
1134 | <label class="md-nav__title" for="__nav_5"> |
1135 | <span class="md-nav__icon md-icon"></span> | |
1136 | Package Components | |
1137 | </label> | |
1138 | <ul class="md-nav__list" data-md-scrollfix> | |
1139 | ||
1140 | ||
1141 | ||
1142 | ||
1143 | ||
1144 | ||
1145 | <li class="md-nav__item"> | |
1146 | <a href="../../../package/package-xml/" class="md-nav__link"> | |
1147 | package.xml | |
1148 | </a> | |
1149 | </li> | |
1150 | ||
1151 | ||
1152 | ||
1153 | ||
1154 | ||
1155 | ||
1156 | ||
1157 | ||
1158 | ||
1159 | ||
1160 | <li class="md-nav__item md-nav__item--nested"> | |
1161 | ||
1162 | ||
9aa5da67 WG |
1163 | |
1164 | ||
51b70eee | 1165 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" > |
9aa5da67 WG |
1166 | |
1167 | ||
e02609d6 | 1168 | |
51b70eee | 1169 | <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0"> |
9aa5da67 WG |
1170 | PIPs |
1171 | <span class="md-nav__icon md-icon"></span> | |
1172 | </label> | |
1173 | ||
51b70eee | 1174 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false"> |
9aa5da67 WG |
1175 | <label class="md-nav__title" for="__nav_5_2"> |
1176 | <span class="md-nav__icon md-icon"></span> | |
1177 | PIPs | |
1178 | </label> | |
1179 | <ul class="md-nav__list" data-md-scrollfix> | |
1180 | ||
1181 | ||
1182 | ||
1183 | ||
1184 | ||
1185 | ||
1186 | <li class="md-nav__item"> | |
1187 | <a href="../../../package/pip/" class="md-nav__link"> | |
1188 | Overview | |
1189 | </a> | |
1190 | </li> | |
1191 | ||
1192 | ||
1193 | ||
1194 | ||
1195 | ||
1196 | ||
1197 | ||
1198 | ||
1199 | ||
1200 | <li class="md-nav__item"> | |
1201 | <a href="../../../package/pip/acl-option/" class="md-nav__link"> | |
1202 | aclOption | |
1203 | </a> | |
1204 | </li> | |
1205 | ||
1206 | ||
1207 | ||
1208 | ||
1209 | ||
1210 | ||
1211 | ||
1212 | ||
1213 | ||
1214 | <li class="md-nav__item"> | |
1215 | <a href="../../../package/pip/acp-menu/" class="md-nav__link"> | |
1216 | acpMenu | |
1217 | </a> | |
1218 | </li> | |
1219 | ||
1220 | ||
1221 | ||
1222 | ||
1223 | ||
1224 | ||
1225 | ||
1226 | ||
1227 | ||
1228 | <li class="md-nav__item"> | |
1229 | <a href="../../../package/pip/acp-search-provider/" class="md-nav__link"> | |
1230 | acpSearchProvider | |
1231 | </a> | |
1232 | </li> | |
1233 | ||
1234 | ||
1235 | ||
1236 | ||
1237 | ||
1238 | ||
1239 | ||
1240 | ||
1241 | ||
1242 | <li class="md-nav__item"> | |
1243 | <a href="../../../package/pip/acp-template/" class="md-nav__link"> | |
1244 | acpTemplate | |
1245 | </a> | |
1246 | </li> | |
1247 | ||
1248 | ||
1249 | ||
1250 | ||
1251 | ||
1252 | ||
1253 | ||
1254 | ||
1255 | ||
1256 | <li class="md-nav__item"> | |
1257 | <a href="../../../package/pip/acp-template-delete/" class="md-nav__link"> | |
1258 | acpTemplateDelete | |
1259 | </a> | |
1260 | </li> | |
1261 | ||
1262 | ||
1263 | ||
1264 | ||
1265 | ||
1266 | ||
1267 | ||
1268 | ||
1269 | ||
1270 | <li class="md-nav__item"> | |
1271 | <a href="../../../package/pip/bbcode/" class="md-nav__link"> | |
1272 | bbcode | |
1273 | </a> | |
1274 | </li> | |
1275 | ||
1276 | ||
1277 | ||
1278 | ||
1279 | ||
1280 | ||
1281 | ||
1282 | ||
1283 | ||
1284 | <li class="md-nav__item"> | |
1285 | <a href="../../../package/pip/box/" class="md-nav__link"> | |
1286 | box | |
1287 | </a> | |
1288 | </li> | |
1289 | ||
1290 | ||
1291 | ||
1292 | ||
1293 | ||
1294 | ||
1295 | ||
1296 | ||
1297 | ||
1298 | <li class="md-nav__item"> | |
1299 | <a href="../../../package/pip/clipboard-action/" class="md-nav__link"> | |
1300 | clipboardAction | |
1301 | </a> | |
1302 | </li> | |
1303 | ||
1304 | ||
1305 | ||
1306 | ||
1307 | ||
1308 | ||
1309 | ||
1310 | ||
1311 | ||
1312 | <li class="md-nav__item"> | |
1313 | <a href="../../../package/pip/core-object/" class="md-nav__link"> | |
1314 | coreObject | |
1315 | </a> | |
1316 | </li> | |
1317 | ||
1318 | ||
1319 | ||
1320 | ||
1321 | ||
1322 | ||
1323 | ||
1324 | ||
1325 | ||
1326 | <li class="md-nav__item"> | |
1327 | <a href="../../../package/pip/cronjob/" class="md-nav__link"> | |
1328 | cronjob | |
1329 | </a> | |
1330 | </li> | |
1331 | ||
1332 | ||
1333 | ||
1334 | ||
1335 | ||
1336 | ||
1337 | ||
1338 | ||
1339 | ||
1340 | <li class="md-nav__item"> | |
1341 | <a href="../../../package/pip/database/" class="md-nav__link"> | |
1342 | database | |
1343 | </a> | |
1344 | </li> | |
1345 | ||
1346 | ||
1347 | ||
1348 | ||
1349 | ||
1350 | ||
1351 | ||
1352 | ||
1353 | ||
1354 | <li class="md-nav__item"> | |
1355 | <a href="../../../package/pip/event-listener/" class="md-nav__link"> | |
1356 | eventListener | |
1357 | </a> | |
1358 | </li> | |
1359 | ||
1360 | ||
1361 | ||
1362 | ||
1363 | ||
1364 | ||
1365 | ||
1366 | ||
1367 | ||
1368 | <li class="md-nav__item"> | |
1369 | <a href="../../../package/pip/file/" class="md-nav__link"> | |
1370 | file | |
1371 | </a> | |
1372 | </li> | |
1373 | ||
1374 | ||
1375 | ||
1376 | ||
1377 | ||
1378 | ||
1379 | ||
1380 | ||
1381 | ||
1382 | <li class="md-nav__item"> | |
1383 | <a href="../../../package/pip/file-delete/" class="md-nav__link"> | |
1384 | fileDelete | |
1385 | </a> | |
1386 | </li> | |
1387 | ||
1388 | ||
1389 | ||
1390 | ||
1391 | ||
1392 | ||
1393 | ||
1394 | ||
1395 | ||
1396 | <li class="md-nav__item"> | |
1397 | <a href="../../../package/pip/language/" class="md-nav__link"> | |
1398 | language | |
1399 | </a> | |
1400 | </li> | |
1401 | ||
1402 | ||
1403 | ||
1404 | ||
1405 | ||
1406 | ||
1407 | ||
1408 | ||
1409 | ||
1410 | <li class="md-nav__item"> | |
1411 | <a href="../../../package/pip/media-provider/" class="md-nav__link"> | |
1412 | mediaProvider | |
1413 | </a> | |
1414 | </li> | |
1415 | ||
1416 | ||
1417 | ||
1418 | ||
1419 | ||
1420 | ||
1421 | ||
1422 | ||
1423 | ||
1424 | <li class="md-nav__item"> | |
1425 | <a href="../../../package/pip/menu/" class="md-nav__link"> | |
1426 | menu | |
1427 | </a> | |
1428 | </li> | |
1429 | ||
1430 | ||
1431 | ||
1432 | ||
1433 | ||
1434 | ||
1435 | ||
1436 | ||
1437 | ||
1438 | <li class="md-nav__item"> | |
1439 | <a href="../../../package/pip/menu-item/" class="md-nav__link"> | |
1440 | menuItem | |
1441 | </a> | |
1442 | </li> | |
1443 | ||
1444 | ||
1445 | ||
1446 | ||
1447 | ||
1448 | ||
1449 | ||
1450 | ||
1451 | ||
1452 | <li class="md-nav__item"> | |
1453 | <a href="../../../package/pip/object-type/" class="md-nav__link"> | |
1454 | objectType | |
1455 | </a> | |
1456 | </li> | |
1457 | ||
1458 | ||
1459 | ||
1460 | ||
1461 | ||
1462 | ||
1463 | ||
1464 | ||
1465 | ||
1466 | <li class="md-nav__item"> | |
1467 | <a href="../../../package/pip/object-type-definition/" class="md-nav__link"> | |
1468 | objectTypeDefinition | |
1469 | </a> | |
1470 | </li> | |
1471 | ||
1472 | ||
1473 | ||
1474 | ||
1475 | ||
1476 | ||
1477 | ||
1478 | ||
1479 | ||
1480 | <li class="md-nav__item"> | |
1481 | <a href="../../../package/pip/option/" class="md-nav__link"> | |
1482 | option | |
1483 | </a> | |
1484 | </li> | |
1485 | ||
1486 | ||
1487 | ||
1488 | ||
1489 | ||
1490 | ||
1491 | ||
1492 | ||
1493 | ||
1494 | <li class="md-nav__item"> | |
1495 | <a href="../../../package/pip/page/" class="md-nav__link"> | |
1496 | page | |
1497 | </a> | |
1498 | </li> | |
1499 | ||
1500 | ||
1501 | ||
1502 | ||
1503 | ||
1504 | ||
1505 | ||
1506 | ||
1507 | ||
1508 | <li class="md-nav__item"> | |
1509 | <a href="../../../package/pip/pip/" class="md-nav__link"> | |
1510 | pip | |
1511 | </a> | |
1512 | </li> | |
1513 | ||
1514 | ||
1515 | ||
1516 | ||
1517 | ||
1518 | ||
1519 | ||
1520 | ||
1521 | ||
1522 | <li class="md-nav__item"> | |
1523 | <a href="../../../package/pip/script/" class="md-nav__link"> | |
1524 | script | |
1525 | </a> | |
1526 | </li> | |
1527 | ||
1528 | ||
1529 | ||
1530 | ||
1531 | ||
1532 | ||
1533 | ||
1534 | ||
1535 | ||
1536 | <li class="md-nav__item"> | |
1537 | <a href="../../../package/pip/smiley/" class="md-nav__link"> | |
1538 | smiley | |
1539 | </a> | |
1540 | </li> | |
1541 | ||
1542 | ||
1543 | ||
1544 | ||
1545 | ||
1546 | ||
1547 | ||
1548 | ||
1549 | ||
1550 | <li class="md-nav__item"> | |
1551 | <a href="../../../package/pip/sql/" class="md-nav__link"> | |
1552 | sql | |
1553 | </a> | |
1554 | </li> | |
1555 | ||
1556 | ||
1557 | ||
1558 | ||
1559 | ||
1560 | ||
1561 | ||
1562 | ||
1563 | ||
1564 | <li class="md-nav__item"> | |
1565 | <a href="../../../package/pip/style/" class="md-nav__link"> | |
1566 | style | |
1567 | </a> | |
1568 | </li> | |
1569 | ||
1570 | ||
1571 | ||
1572 | ||
1573 | ||
1574 | ||
1575 | ||
1576 | ||
1577 | ||
1578 | <li class="md-nav__item"> | |
1579 | <a href="../../../package/pip/template/" class="md-nav__link"> | |
1580 | template | |
1581 | </a> | |
1582 | </li> | |
1583 | ||
1584 | ||
1585 | ||
1586 | ||
1587 | ||
1588 | ||
1589 | ||
1590 | ||
1591 | ||
1592 | <li class="md-nav__item"> | |
1593 | <a href="../../../package/pip/template-delete/" class="md-nav__link"> | |
1594 | templateDelete | |
1595 | </a> | |
1596 | </li> | |
1597 | ||
1598 | ||
1599 | ||
1600 | ||
1601 | ||
1602 | ||
1603 | ||
1604 | ||
1605 | ||
1606 | <li class="md-nav__item"> | |
1607 | <a href="../../../package/pip/template-listener/" class="md-nav__link"> | |
1608 | templateListener | |
1609 | </a> | |
1610 | </li> | |
1611 | ||
1612 | ||
1613 | ||
1614 | ||
1615 | ||
1616 | ||
1617 | ||
1618 | ||
1619 | ||
1620 | <li class="md-nav__item"> | |
1621 | <a href="../../../package/pip/user-group-option/" class="md-nav__link"> | |
1622 | userGroupOption | |
1623 | </a> | |
1624 | </li> | |
1625 | ||
1626 | ||
1627 | ||
1628 | ||
1629 | ||
1630 | ||
1631 | ||
1632 | ||
1633 | ||
1634 | <li class="md-nav__item"> | |
1635 | <a href="../../../package/pip/user-menu/" class="md-nav__link"> | |
1636 | userMenu | |
1637 | </a> | |
1638 | </li> | |
1639 | ||
1640 | ||
1641 | ||
1642 | ||
1643 | ||
1644 | ||
1645 | ||
1646 | ||
1647 | ||
1648 | <li class="md-nav__item"> | |
1649 | <a href="../../../package/pip/user-notification-event/" class="md-nav__link"> | |
1650 | userNotificationEvent | |
1651 | </a> | |
1652 | </li> | |
1653 | ||
1654 | ||
1655 | ||
1656 | ||
1657 | ||
1658 | ||
1659 | ||
1660 | ||
1661 | ||
1662 | <li class="md-nav__item"> | |
1663 | <a href="../../../package/pip/user-option/" class="md-nav__link"> | |
1664 | userOption | |
1665 | </a> | |
1666 | </li> | |
1667 | ||
1668 | ||
1669 | ||
1670 | ||
1671 | ||
1672 | ||
1673 | ||
1674 | ||
1675 | ||
1676 | <li class="md-nav__item"> | |
1677 | <a href="../../../package/pip/user-profile-menu/" class="md-nav__link"> | |
1678 | userProfileMenu | |
1679 | </a> | |
1680 | </li> | |
1681 | ||
1682 | ||
1683 | ||
1684 | ||
1685 | </ul> | |
1686 | </nav> | |
1687 | </li> | |
1688 | ||
1689 | ||
1690 | ||
1691 | ||
1692 | ||
1693 | ||
1694 | ||
1695 | ||
1696 | ||
1697 | <li class="md-nav__item"> | |
1698 | <a href="../../../package/database-php-api/" class="md-nav__link"> | |
1699 | Database PHP API | |
1700 | </a> | |
1701 | </li> | |
1702 | ||
1703 | ||
1704 | ||
1705 | ||
1706 | </ul> | |
1707 | </nav> | |
1708 | </li> | |
1709 | ||
1710 | ||
1711 | ||
1712 | ||
1713 | ||
1714 | ||
1715 | ||
1716 | ||
1717 | ||
1718 | ||
1719 | ||
1720 | ||
1721 | ||
1722 | <li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |
1723 | ||
1724 | ||
9aa5da67 WG |
1725 | |
1726 | ||
51b70eee | 1727 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked> |
e02609d6 | 1728 | |
9aa5da67 WG |
1729 | |
1730 | ||
51b70eee | 1731 | <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> |
9aa5da67 WG |
1732 | Migration |
1733 | <span class="md-nav__icon md-icon"></span> | |
1734 | </label> | |
1735 | ||
51b70eee | 1736 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true"> |
9aa5da67 WG |
1737 | <label class="md-nav__title" for="__nav_6"> |
1738 | <span class="md-nav__icon md-icon"></span> | |
1739 | Migration | |
1740 | </label> | |
1741 | <ul class="md-nav__list" data-md-scrollfix> | |
1742 | ||
1743 | ||
1744 | ||
1745 | ||
1746 | ||
1747 | ||
1748 | ||
1749 | <li class="md-nav__item md-nav__item--nested"> | |
1750 | ||
1751 | ||
9aa5da67 WG |
1752 | |
1753 | ||
51b70eee | 1754 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_1" > |
e02609d6 | 1755 | |
9aa5da67 WG |
1756 | |
1757 | ||
51b70eee | 1758 | <label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0"> |
9aa5da67 WG |
1759 | From WoltLab Suite 5.5 |
1760 | <span class="md-nav__icon md-icon"></span> | |
1761 | </label> | |
1762 | ||
51b70eee | 1763 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false"> |
9aa5da67 WG |
1764 | <label class="md-nav__title" for="__nav_6_1"> |
1765 | <span class="md-nav__icon md-icon"></span> | |
1766 | From WoltLab Suite 5.5 | |
1767 | </label> | |
1768 | <ul class="md-nav__list" data-md-scrollfix> | |
1769 | ||
1770 | ||
1771 | ||
1772 | ||
1773 | ||
1774 | ||
1775 | <li class="md-nav__item"> | |
1776 | <a href="../../wsc55/php/" class="md-nav__link"> | |
1777 | PHP API | |
1778 | </a> | |
1779 | </li> | |
1780 | ||
1781 | ||
1782 | ||
1783 | ||
1784 | ||
1785 | ||
1786 | ||
1787 | ||
1788 | ||
1789 | <li class="md-nav__item"> | |
1790 | <a href="../../wsc55/javascript/" class="md-nav__link"> | |
1791 | TypeScript and JavaScript | |
1792 | </a> | |
1793 | </li> | |
1794 | ||
1795 | ||
1796 | ||
1797 | ||
1798 | ||
1799 | ||
1800 | ||
1801 | ||
1802 | ||
1803 | <li class="md-nav__item"> | |
1804 | <a href="../../wsc55/templates/" class="md-nav__link"> | |
1805 | Templates | |
1806 | </a> | |
1807 | </li> | |
1808 | ||
1809 | ||
1810 | ||
1811 | ||
1812 | ||
1813 | ||
1814 | ||
1815 | ||
1816 | ||
024038ef WG |
1817 | <li class="md-nav__item"> |
1818 | <a href="../../wsc55/icons/" class="md-nav__link"> | |
1819 | Icons | |
1820 | </a> | |
1821 | </li> | |
1822 | ||
1823 | ||
1824 | ||
1825 | ||
1826 | ||
1827 | ||
1828 | ||
1829 | ||
1830 | ||
6d611e8a WG |
1831 | <li class="md-nav__item"> |
1832 | <a href="../../wsc55/dialogs/" class="md-nav__link"> | |
1833 | Dialogs | |
1834 | </a> | |
1835 | </li> | |
1836 | ||
1837 | ||
1838 | ||
1839 | ||
1840 | ||
1841 | ||
1842 | ||
1843 | ||
1844 | ||
9aa5da67 WG |
1845 | <li class="md-nav__item"> |
1846 | <a href="../../wsc55/libraries/" class="md-nav__link"> | |
1847 | Third Party Libraries | |
1848 | </a> | |
1849 | </li> | |
1850 | ||
1851 | ||
1852 | ||
1853 | ||
1854 | ||
1855 | ||
1856 | ||
1857 | ||
1858 | ||
1859 | <li class="md-nav__item"> | |
1860 | <a href="../../wsc55/deprecations_removals/" class="md-nav__link"> | |
1861 | Deprecations and Removals | |
1862 | </a> | |
1863 | </li> | |
1864 | ||
1865 | ||
1866 | ||
1867 | ||
1868 | </ul> | |
1869 | </nav> | |
1870 | </li> | |
1871 | ||
1872 | ||
1873 | ||
1874 | ||
1875 | ||
1876 | ||
1877 | ||
1878 | ||
1879 | ||
1880 | ||
1881 | <li class="md-nav__item md-nav__item--nested"> | |
1882 | ||
1883 | ||
9aa5da67 WG |
1884 | |
1885 | ||
51b70eee | 1886 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" > |
9aa5da67 WG |
1887 | |
1888 | ||
e02609d6 | 1889 | |
51b70eee | 1890 | <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0"> |
9aa5da67 WG |
1891 | From WoltLab Suite 5.4 |
1892 | <span class="md-nav__icon md-icon"></span> | |
1893 | </label> | |
1894 | ||
51b70eee | 1895 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false"> |
9aa5da67 WG |
1896 | <label class="md-nav__title" for="__nav_6_2"> |
1897 | <span class="md-nav__icon md-icon"></span> | |
1898 | From WoltLab Suite 5.4 | |
1899 | </label> | |
1900 | <ul class="md-nav__list" data-md-scrollfix> | |
1901 | ||
1902 | ||
1903 | ||
1904 | ||
1905 | ||
1906 | ||
1907 | <li class="md-nav__item"> | |
1908 | <a href="../../wsc54/php/" class="md-nav__link"> | |
1909 | PHP API | |
1910 | </a> | |
1911 | </li> | |
1912 | ||
1913 | ||
1914 | ||
1915 | ||
1916 | ||
1917 | ||
1918 | ||
1919 | ||
1920 | ||
1921 | <li class="md-nav__item"> | |
1922 | <a href="../../wsc54/javascript/" class="md-nav__link"> | |
1923 | TypeScript and JavaScript | |
1924 | </a> | |
1925 | </li> | |
1926 | ||
1927 | ||
1928 | ||
1929 | ||
1930 | ||
1931 | ||
1932 | ||
1933 | ||
1934 | ||
1935 | <li class="md-nav__item"> | |
1936 | <a href="../../wsc54/templates/" class="md-nav__link"> | |
1937 | Templates | |
1938 | </a> | |
1939 | </li> | |
1940 | ||
1941 | ||
1942 | ||
1943 | ||
1944 | ||
1945 | ||
1946 | ||
1947 | ||
1948 | ||
1949 | <li class="md-nav__item"> | |
1950 | <a href="../../wsc54/libraries/" class="md-nav__link"> | |
1951 | Third Party Libraries | |
1952 | </a> | |
1953 | </li> | |
1954 | ||
1955 | ||
1956 | ||
1957 | ||
1958 | ||
1959 | ||
1960 | ||
1961 | ||
1962 | ||
1963 | <li class="md-nav__item"> | |
1964 | <a href="../../wsc54/deprecations_removals/" class="md-nav__link"> | |
1965 | Deprecations and Removals | |
1966 | </a> | |
1967 | </li> | |
1968 | ||
1969 | ||
1970 | ||
1971 | ||
1972 | </ul> | |
1973 | </nav> | |
1974 | </li> | |
1975 | ||
1976 | ||
1977 | ||
1978 | ||
1979 | ||
1980 | ||
1981 | ||
1982 | ||
1983 | ||
1984 | ||
1985 | ||
1986 | ||
1987 | <li class="md-nav__item md-nav__item--active md-nav__item--nested"> | |
1988 | ||
1989 | ||
9aa5da67 WG |
1990 | |
1991 | ||
51b70eee | 1992 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_3" checked> |
e02609d6 | 1993 | |
9aa5da67 WG |
1994 | |
1995 | ||
51b70eee | 1996 | <label class="md-nav__link" for="__nav_6_3" id="__nav_6_3_label" tabindex="0"> |
9aa5da67 WG |
1997 | From WoltLab Suite 5.3 |
1998 | <span class="md-nav__icon md-icon"></span> | |
1999 | </label> | |
2000 | ||
51b70eee | 2001 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_3_label" aria-expanded="true"> |
9aa5da67 WG |
2002 | <label class="md-nav__title" for="__nav_6_3"> |
2003 | <span class="md-nav__icon md-icon"></span> | |
2004 | From WoltLab Suite 5.3 | |
2005 | </label> | |
2006 | <ul class="md-nav__list" data-md-scrollfix> | |
2007 | ||
2008 | ||
2009 | ||
2010 | ||
2011 | ||
2012 | ||
2013 | <li class="md-nav__item"> | |
2014 | <a href="../php/" class="md-nav__link"> | |
2015 | PHP API | |
2016 | </a> | |
2017 | </li> | |
2018 | ||
2019 | ||
2020 | ||
2021 | ||
2022 | ||
2023 | ||
2024 | ||
2025 | ||
2026 | ||
2027 | ||
2028 | ||
2029 | <li class="md-nav__item md-nav__item--active"> | |
2030 | ||
51b70eee | 2031 | <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> |
9aa5da67 WG |
2032 | |
2033 | ||
2034 | ||
2035 | ||
2036 | ||
2037 | <label class="md-nav__link md-nav__link--active" for="__toc"> | |
2038 | Session Handling and Authentication | |
2039 | <span class="md-nav__icon md-icon"></span> | |
2040 | </label> | |
2041 | ||
2042 | <a href="./" class="md-nav__link md-nav__link--active"> | |
2043 | Session Handling and Authentication | |
2044 | </a> | |
2045 | ||
2046 | ||
2047 | ||
2048 | <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |
2049 | ||
2050 | ||
2051 | ||
2052 | ||
2053 | ||
2054 | ||
2055 | <label class="md-nav__title" for="__toc"> | |
2056 | <span class="md-nav__icon md-icon"></span> | |
2057 | Table of contents | |
2058 | </label> | |
2059 | <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> | |
2060 | ||
2061 | <li class="md-nav__item"> | |
2062 | <a href="#summary-and-concepts" class="md-nav__link"> | |
2063 | Summary and Concepts | |
2064 | </a> | |
2065 | ||
2066 | <nav class="md-nav" aria-label="Summary and Concepts"> | |
2067 | <ul class="md-nav__list"> | |
2068 | ||
2069 | <li class="md-nav__item"> | |
2070 | <a href="#legacy-persistent-login" class="md-nav__link"> | |
2071 | Legacy Persistent Login | |
2072 | </a> | |
2073 | ||
2074 | </li> | |
2075 | ||
2076 | <li class="md-nav__item"> | |
2077 | <a href="#multiple-sessions" class="md-nav__link"> | |
2078 | Multiple Sessions | |
2079 | </a> | |
2080 | ||
2081 | </li> | |
2082 | ||
2083 | <li class="md-nav__item"> | |
2084 | <a href="#merged-acp-and-frontend-sessions" class="md-nav__link"> | |
2085 | Merged ACP and Frontend Sessions | |
2086 | </a> | |
2087 | ||
2088 | </li> | |
2089 | ||
2090 | <li class="md-nav__item"> | |
2091 | <a href="#improved-authentication-and-reauthentication" class="md-nav__link"> | |
2092 | Improved Authentication and Reauthentication | |
2093 | </a> | |
2094 | ||
2095 | </li> | |
2096 | ||
2097 | </ul> | |
2098 | </nav> | |
2099 | ||
2100 | </li> | |
2101 | ||
2102 | <li class="md-nav__item"> | |
2103 | <a href="#additions-and-changes" class="md-nav__link"> | |
2104 | Additions and Changes | |
2105 | </a> | |
2106 | ||
2107 | <nav class="md-nav" aria-label="Additions and Changes"> | |
2108 | <ul class="md-nav__list"> | |
2109 | ||
2110 | <li class="md-nav__item"> | |
2111 | <a href="#password-hashing" class="md-nav__link"> | |
2112 | Password Hashing | |
2113 | </a> | |
2114 | ||
2115 | </li> | |
2116 | ||
2117 | <li class="md-nav__item"> | |
2118 | <a href="#session-storage" class="md-nav__link"> | |
2119 | Session Storage | |
2120 | </a> | |
2121 | ||
2122 | </li> | |
2123 | ||
2124 | <li class="md-nav__item"> | |
2125 | <a href="#reauthentication" class="md-nav__link"> | |
2126 | Reauthentication | |
2127 | </a> | |
2128 | ||
2129 | </li> | |
2130 | ||
2131 | <li class="md-nav__item"> | |
2132 | <a href="#multi-factor-authentication" class="md-nav__link"> | |
2133 | Multi-factor Authentication | |
2134 | </a> | |
2135 | ||
2136 | <nav class="md-nav" aria-label="Multi-factor Authentication"> | |
2137 | <ul class="md-nav__list"> | |
2138 | ||
2139 | <li class="md-nav__item"> | |
2140 | <a href="#adding-multi-factor-methods" class="md-nav__link"> | |
2141 | Adding Multi-factor Methods | |
2142 | </a> | |
2143 | ||
2144 | </li> | |
2145 | ||
2146 | <li class="md-nav__item"> | |
2147 | <a href="#enforcing-multi-factor-authentication" class="md-nav__link"> | |
2148 | Enforcing Multi-factor Authentication | |
2149 | </a> | |
2150 | ||
2151 | </li> | |
2152 | ||
2153 | </ul> | |
2154 | </nav> | |
2155 | ||
2156 | </li> | |
2157 | ||
2158 | </ul> | |
2159 | </nav> | |
2160 | ||
2161 | </li> | |
2162 | ||
2163 | <li class="md-nav__item"> | |
2164 | <a href="#deprecations-and-removals" class="md-nav__link"> | |
2165 | Deprecations and Removals | |
2166 | </a> | |
2167 | ||
2168 | <nav class="md-nav" aria-label="Deprecations and Removals"> | |
2169 | <ul class="md-nav__list"> | |
2170 | ||
2171 | <li class="md-nav__item"> | |
2172 | <a href="#sessionhandler" class="md-nav__link"> | |
2173 | SessionHandler | |
2174 | </a> | |
2175 | ||
2176 | </li> | |
2177 | ||
2178 | <li class="md-nav__item"> | |
2179 | <a href="#acp-sessions" class="md-nav__link"> | |
2180 | ACP Sessions | |
2181 | </a> | |
2182 | ||
2183 | </li> | |
2184 | ||
2185 | <li class="md-nav__item"> | |
2186 | <a href="#cookies" class="md-nav__link"> | |
2187 | Cookies | |
2188 | </a> | |
2189 | ||
2190 | </li> | |
2191 | ||
2192 | <li class="md-nav__item"> | |
2193 | <a href="#virtual-sessions" class="md-nav__link"> | |
2194 | Virtual Sessions | |
2195 | </a> | |
2196 | ||
2197 | </li> | |
2198 | ||
2199 | <li class="md-nav__item"> | |
2200 | <a href="#security-token-constants" class="md-nav__link"> | |
2201 | Security Token Constants | |
2202 | </a> | |
2203 | ||
2204 | </li> | |
2205 | ||
2206 | <li class="md-nav__item"> | |
2207 | <a href="#passwordutil-and-double-bcrypt-hashes" class="md-nav__link"> | |
2208 | PasswordUtil and Double BCrypt Hashes | |
2209 | </a> | |
2210 | ||
2211 | </li> | |
2212 | ||
2213 | </ul> | |
2214 | </nav> | |
2215 | ||
2216 | </li> | |
2217 | ||
2218 | </ul> | |
2219 | ||
2220 | </nav> | |
2221 | ||
2222 | </li> | |
2223 | ||
2224 | ||
2225 | ||
2226 | ||
2227 | ||
2228 | ||
2229 | ||
2230 | ||
2231 | ||
2232 | <li class="md-nav__item"> | |
2233 | <a href="../javascript/" class="md-nav__link"> | |
2234 | TypeScript and JavaScript | |
2235 | </a> | |
2236 | </li> | |
2237 | ||
2238 | ||
2239 | ||
2240 | ||
2241 | ||
2242 | ||
2243 | ||
2244 | ||
2245 | ||
2246 | <li class="md-nav__item"> | |
2247 | <a href="../templates/" class="md-nav__link"> | |
2248 | Templates | |
2249 | </a> | |
2250 | </li> | |
2251 | ||
2252 | ||
2253 | ||
2254 | ||
2255 | ||
2256 | ||
2257 | ||
2258 | ||
2259 | ||
2260 | <li class="md-nav__item"> | |
2261 | <a href="../libraries/" class="md-nav__link"> | |
2262 | Third Party Libraries | |
2263 | </a> | |
2264 | </li> | |
2265 | ||
2266 | ||
2267 | ||
2268 | ||
2269 | </ul> | |
2270 | </nav> | |
2271 | </li> | |
2272 | ||
2273 | ||
2274 | ||
2275 | ||
2276 | ||
2277 | ||
2278 | ||
2279 | ||
2280 | ||
2281 | ||
2282 | <li class="md-nav__item md-nav__item--nested"> | |
2283 | ||
2284 | ||
9aa5da67 WG |
2285 | |
2286 | ||
51b70eee | 2287 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_4" > |
e02609d6 | 2288 | |
9aa5da67 WG |
2289 | |
2290 | ||
51b70eee | 2291 | <label class="md-nav__link" for="__nav_6_4" id="__nav_6_4_label" tabindex="0"> |
9aa5da67 WG |
2292 | From WoltLab Suite 5.2 |
2293 | <span class="md-nav__icon md-icon"></span> | |
2294 | </label> | |
2295 | ||
51b70eee | 2296 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_4_label" aria-expanded="false"> |
9aa5da67 WG |
2297 | <label class="md-nav__title" for="__nav_6_4"> |
2298 | <span class="md-nav__icon md-icon"></span> | |
2299 | From WoltLab Suite 5.2 | |
2300 | </label> | |
2301 | <ul class="md-nav__list" data-md-scrollfix> | |
2302 | ||
2303 | ||
2304 | ||
2305 | ||
2306 | ||
2307 | ||
2308 | <li class="md-nav__item"> | |
2309 | <a href="../../wsc52/php/" class="md-nav__link"> | |
2310 | PHP API | |
2311 | </a> | |
2312 | </li> | |
2313 | ||
2314 | ||
2315 | ||
2316 | ||
2317 | ||
2318 | ||
2319 | ||
2320 | ||
2321 | ||
2322 | <li class="md-nav__item"> | |
2323 | <a href="../../wsc52/templates/" class="md-nav__link"> | |
2324 | Templates and Languages | |
2325 | </a> | |
2326 | </li> | |
2327 | ||
2328 | ||
2329 | ||
2330 | ||
2331 | ||
2332 | ||
2333 | ||
2334 | ||
2335 | ||
2336 | <li class="md-nav__item"> | |
2337 | <a href="../../wsc52/libraries/" class="md-nav__link"> | |
2338 | Third Party Libraries | |
2339 | </a> | |
2340 | </li> | |
2341 | ||
2342 | ||
2343 | ||
2344 | ||
2345 | </ul> | |
2346 | </nav> | |
2347 | </li> | |
2348 | ||
2349 | ||
2350 | ||
2351 | ||
2352 | ||
2353 | ||
2354 | ||
2355 | ||
2356 | ||
2357 | ||
2358 | <li class="md-nav__item md-nav__item--nested"> | |
2359 | ||
2360 | ||
9aa5da67 WG |
2361 | |
2362 | ||
51b70eee | 2363 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_5" > |
9aa5da67 WG |
2364 | |
2365 | ||
e02609d6 | 2366 | |
51b70eee | 2367 | <label class="md-nav__link" for="__nav_6_5" id="__nav_6_5_label" tabindex="0"> |
9aa5da67 WG |
2368 | From WoltLab Suite 3.1 |
2369 | <span class="md-nav__icon md-icon"></span> | |
2370 | </label> | |
2371 | ||
51b70eee | 2372 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_5_label" aria-expanded="false"> |
9aa5da67 WG |
2373 | <label class="md-nav__title" for="__nav_6_5"> |
2374 | <span class="md-nav__icon md-icon"></span> | |
2375 | From WoltLab Suite 3.1 | |
2376 | </label> | |
2377 | <ul class="md-nav__list" data-md-scrollfix> | |
2378 | ||
2379 | ||
2380 | ||
2381 | ||
2382 | ||
2383 | ||
2384 | <li class="md-nav__item"> | |
2385 | <a href="../../wsc31/php/" class="md-nav__link"> | |
2386 | PHP API | |
2387 | </a> | |
2388 | </li> | |
2389 | ||
2390 | ||
2391 | ||
2392 | ||
2393 | </ul> | |
2394 | </nav> | |
2395 | </li> | |
2396 | ||
2397 | ||
2398 | ||
2399 | ||
2400 | ||
2401 | ||
2402 | ||
2403 | ||
2404 | ||
2405 | ||
2406 | <li class="md-nav__item md-nav__item--nested"> | |
2407 | ||
2408 | ||
9aa5da67 WG |
2409 | |
2410 | ||
51b70eee | 2411 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_6" > |
e02609d6 | 2412 | |
9aa5da67 WG |
2413 | |
2414 | ||
51b70eee | 2415 | <label class="md-nav__link" for="__nav_6_6" id="__nav_6_6_label" tabindex="0"> |
9aa5da67 WG |
2416 | From WoltLab Suite 3.0 |
2417 | <span class="md-nav__icon md-icon"></span> | |
2418 | </label> | |
2419 | ||
51b70eee | 2420 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_6_label" aria-expanded="false"> |
9aa5da67 WG |
2421 | <label class="md-nav__title" for="__nav_6_6"> |
2422 | <span class="md-nav__icon md-icon"></span> | |
2423 | From WoltLab Suite 3.0 | |
2424 | </label> | |
2425 | <ul class="md-nav__list" data-md-scrollfix> | |
2426 | ||
2427 | ||
2428 | ||
2429 | ||
2430 | ||
2431 | ||
2432 | <li class="md-nav__item"> | |
2433 | <a href="../../wsc30/php/" class="md-nav__link"> | |
2434 | PHP API | |
2435 | </a> | |
2436 | </li> | |
2437 | ||
2438 | ||
2439 | ||
2440 | ||
2441 | ||
2442 | ||
2443 | ||
2444 | ||
2445 | ||
2446 | <li class="md-nav__item"> | |
2447 | <a href="../../wsc30/javascript/" class="md-nav__link"> | |
2448 | JavaScript API | |
2449 | </a> | |
2450 | </li> | |
2451 | ||
2452 | ||
2453 | ||
2454 | ||
2455 | ||
2456 | ||
2457 | ||
2458 | ||
2459 | ||
2460 | <li class="md-nav__item"> | |
2461 | <a href="../../wsc30/templates/" class="md-nav__link"> | |
2462 | Templates | |
2463 | </a> | |
2464 | </li> | |
2465 | ||
2466 | ||
2467 | ||
2468 | ||
2469 | ||
2470 | ||
2471 | ||
2472 | ||
2473 | ||
2474 | <li class="md-nav__item"> | |
2475 | <a href="../../wsc30/css/" class="md-nav__link"> | |
2476 | CSS | |
2477 | </a> | |
2478 | </li> | |
2479 | ||
2480 | ||
2481 | ||
2482 | ||
2483 | ||
2484 | ||
2485 | ||
2486 | ||
2487 | ||
2488 | <li class="md-nav__item"> | |
2489 | <a href="../../wsc30/package/" class="md-nav__link"> | |
2490 | Package Components | |
2491 | </a> | |
2492 | </li> | |
2493 | ||
2494 | ||
2495 | ||
2496 | ||
2497 | </ul> | |
2498 | </nav> | |
2499 | </li> | |
2500 | ||
2501 | ||
2502 | ||
2503 | ||
2504 | ||
2505 | ||
2506 | ||
2507 | ||
2508 | ||
2509 | ||
2510 | <li class="md-nav__item md-nav__item--nested"> | |
2511 | ||
2512 | ||
9aa5da67 WG |
2513 | |
2514 | ||
51b70eee | 2515 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" > |
e02609d6 | 2516 | |
9aa5da67 WG |
2517 | |
2518 | ||
51b70eee | 2519 | <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0"> |
9aa5da67 WG |
2520 | From WCF 2.1 |
2521 | <span class="md-nav__icon md-icon"></span> | |
2522 | </label> | |
2523 | ||
51b70eee | 2524 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="false"> |
9aa5da67 WG |
2525 | <label class="md-nav__title" for="__nav_6_7"> |
2526 | <span class="md-nav__icon md-icon"></span> | |
2527 | From WCF 2.1 | |
2528 | </label> | |
2529 | <ul class="md-nav__list" data-md-scrollfix> | |
2530 | ||
2531 | ||
2532 | ||
2533 | ||
2534 | ||
2535 | ||
2536 | <li class="md-nav__item"> | |
2537 | <a href="../../wcf21/php/" class="md-nav__link"> | |
2538 | PHP API | |
2539 | </a> | |
2540 | </li> | |
2541 | ||
2542 | ||
2543 | ||
2544 | ||
2545 | ||
2546 | ||
2547 | ||
2548 | ||
2549 | ||
2550 | <li class="md-nav__item"> | |
2551 | <a href="../../wcf21/templates/" class="md-nav__link"> | |
2552 | Templates | |
2553 | </a> | |
2554 | </li> | |
2555 | ||
2556 | ||
2557 | ||
2558 | ||
2559 | ||
2560 | ||
2561 | ||
2562 | ||
2563 | ||
2564 | <li class="md-nav__item"> | |
2565 | <a href="../../wcf21/css/" class="md-nav__link"> | |
2566 | CSS | |
2567 | </a> | |
2568 | </li> | |
2569 | ||
2570 | ||
2571 | ||
2572 | ||
2573 | ||
2574 | ||
2575 | ||
2576 | ||
2577 | ||
2578 | <li class="md-nav__item"> | |
2579 | <a href="../../wcf21/package/" class="md-nav__link"> | |
2580 | Package Components | |
2581 | </a> | |
2582 | </li> | |
2583 | ||
2584 | ||
2585 | ||
2586 | ||
2587 | </ul> | |
2588 | </nav> | |
2589 | </li> | |
2590 | ||
2591 | ||
2592 | ||
2593 | ||
2594 | </ul> | |
2595 | </nav> | |
2596 | </li> | |
2597 | ||
2598 | ||
2599 | ||
2600 | ||
2601 | ||
2602 | ||
2603 | ||
2604 | ||
2605 | ||
2606 | ||
2607 | ||
2608 | <li class="md-nav__item md-nav__item--nested"> | |
2609 | ||
2610 | ||
9aa5da67 WG |
2611 | |
2612 | ||
51b70eee | 2613 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > |
9aa5da67 WG |
2614 | |
2615 | ||
e02609d6 | 2616 | |
51b70eee | 2617 | <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> |
9aa5da67 WG |
2618 | Tutorials |
2619 | <span class="md-nav__icon md-icon"></span> | |
2620 | </label> | |
2621 | ||
51b70eee | 2622 | <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> |
9aa5da67 WG |
2623 | <label class="md-nav__title" for="__nav_7"> |
2624 | <span class="md-nav__icon md-icon"></span> | |
2625 | Tutorials | |
2626 | </label> | |
2627 | <ul class="md-nav__list" data-md-scrollfix> | |
2628 | ||
2629 | ||
2630 | ||
2631 | ||
2632 | ||
2633 | ||
2634 | ||
2635 | <li class="md-nav__item md-nav__item--nested"> | |
2636 | ||
2637 | ||
9aa5da67 WG |
2638 | |
2639 | ||
51b70eee | 2640 | <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1" > |
e02609d6 | 2641 | |
9aa5da67 WG |
2642 | |
2643 | ||
51b70eee | 2644 | <label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0"> |
9aa5da67 WG |
2645 | Tutorial Series |
2646 | <span class="md-nav__icon md-icon"></span> | |
2647 | </label> | |
2648 | ||
51b70eee | 2649 | <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false"> |
9aa5da67 WG |
2650 | <label class="md-nav__title" for="__nav_7_1"> |
2651 | <span class="md-nav__icon md-icon"></span> | |
2652 | Tutorial Series | |
2653 | </label> | |
2654 | <ul class="md-nav__list" data-md-scrollfix> | |
2655 | ||
2656 | ||
2657 | ||
2658 | ||
2659 | ||
2660 | ||
2661 | <li class="md-nav__item"> | |
2662 | <a href="../../../tutorial/series/overview/" class="md-nav__link"> | |
2663 | Overview | |
2664 | </a> | |
2665 | </li> | |
2666 | ||
2667 | ||
2668 | ||
2669 | ||
2670 | ||
2671 | ||
2672 | ||
2673 | ||
2674 | ||
2675 | <li class="md-nav__item"> | |
2676 | <a href="../../../tutorial/series/part_1/" class="md-nav__link"> | |
2677 | Part 1 | |
2678 | </a> | |
2679 | </li> | |
2680 | ||
2681 | ||
2682 | ||
2683 | ||
2684 | ||
2685 | ||
2686 | ||
2687 | ||
2688 | ||
2689 | <li class="md-nav__item"> | |
2690 | <a href="../../../tutorial/series/part_2/" class="md-nav__link"> | |
2691 | Part 2 | |
2692 | </a> | |
2693 | </li> | |
2694 | ||
2695 | ||
2696 | ||
2697 | ||
2698 | ||
2699 | ||
2700 | ||
2701 | ||
2702 | ||
2703 | <li class="md-nav__item"> | |
2704 | <a href="../../../tutorial/series/part_3/" class="md-nav__link"> | |
2705 | Part 3 | |
2706 | </a> | |
2707 | </li> | |
2708 | ||
2709 | ||
2710 | ||
2711 | ||
2712 | ||
2713 | ||
2714 | ||
2715 | ||
2716 | ||
2717 | <li class="md-nav__item"> | |
2718 | <a href="../../../tutorial/series/part_4/" class="md-nav__link"> | |
2719 | Part 4 | |
2720 | </a> | |
2721 | </li> | |
2722 | ||
2723 | ||
2724 | ||
2725 | ||
2726 | ||
2727 | ||
2728 | ||
2729 | ||
2730 | ||
2731 | <li class="md-nav__item"> | |
2732 | <a href="../../../tutorial/series/part_5/" class="md-nav__link"> | |
2733 | Part 5 | |
2734 | </a> | |
2735 | </li> | |
2736 | ||
2737 | ||
2738 | ||
2739 | ||
2740 | ||
2741 | ||
2742 | ||
2743 | ||
2744 | ||
2745 | <li class="md-nav__item"> | |
2746 | <a href="../../../tutorial/series/part_6/" class="md-nav__link"> | |
2747 | Part 6 | |
2748 | </a> | |
2749 | </li> | |
2750 | ||
2751 | ||
2752 | ||
2753 | ||
2754 | </ul> | |
2755 | </nav> | |
2756 | </li> | |
2757 | ||
2758 | ||
2759 | ||
2760 | ||
2761 | </ul> | |
2762 | </nav> | |
2763 | </li> | |
2764 | ||
2765 | ||
2766 | ||
2767 | </ul> | |
2768 | </nav> | |
2769 | </div> | |
2770 | </div> | |
2771 | </div> | |
2772 | ||
2773 | ||
2774 | ||
2775 | <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > | |
2776 | <div class="md-sidebar__scrollwrap"> | |
2777 | <div class="md-sidebar__inner"> | |
2778 | ||
2779 | ||
2780 | <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> | |
2781 | ||
2782 | ||
2783 | ||
2784 | ||
2785 | ||
2786 | ||
2787 | <label class="md-nav__title" for="__toc"> | |
2788 | <span class="md-nav__icon md-icon"></span> | |
2789 | Table of contents | |
2790 | </label> | |
2791 | <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> | |
2792 | ||
2793 | <li class="md-nav__item"> | |
2794 | <a href="#summary-and-concepts" class="md-nav__link"> | |
2795 | Summary and Concepts | |
2796 | </a> | |
2797 | ||
2798 | <nav class="md-nav" aria-label="Summary and Concepts"> | |
2799 | <ul class="md-nav__list"> | |
2800 | ||
2801 | <li class="md-nav__item"> | |
2802 | <a href="#legacy-persistent-login" class="md-nav__link"> | |
2803 | Legacy Persistent Login | |
2804 | </a> | |
2805 | ||
2806 | </li> | |
2807 | ||
2808 | <li class="md-nav__item"> | |
2809 | <a href="#multiple-sessions" class="md-nav__link"> | |
2810 | Multiple Sessions | |
2811 | </a> | |
2812 | ||
2813 | </li> | |
2814 | ||
2815 | <li class="md-nav__item"> | |
2816 | <a href="#merged-acp-and-frontend-sessions" class="md-nav__link"> | |
2817 | Merged ACP and Frontend Sessions | |
2818 | </a> | |
2819 | ||
2820 | </li> | |
2821 | ||
2822 | <li class="md-nav__item"> | |
2823 | <a href="#improved-authentication-and-reauthentication" class="md-nav__link"> | |
2824 | Improved Authentication and Reauthentication | |
2825 | </a> | |
2826 | ||
2827 | </li> | |
2828 | ||
2829 | </ul> | |
2830 | </nav> | |
2831 | ||
2832 | </li> | |
2833 | ||
2834 | <li class="md-nav__item"> | |
2835 | <a href="#additions-and-changes" class="md-nav__link"> | |
2836 | Additions and Changes | |
2837 | </a> | |
2838 | ||
2839 | <nav class="md-nav" aria-label="Additions and Changes"> | |
2840 | <ul class="md-nav__list"> | |
2841 | ||
2842 | <li class="md-nav__item"> | |
2843 | <a href="#password-hashing" class="md-nav__link"> | |
2844 | Password Hashing | |
2845 | </a> | |
2846 | ||
2847 | </li> | |
2848 | ||
2849 | <li class="md-nav__item"> | |
2850 | <a href="#session-storage" class="md-nav__link"> | |
2851 | Session Storage | |
2852 | </a> | |
2853 | ||
2854 | </li> | |
2855 | ||
2856 | <li class="md-nav__item"> | |
2857 | <a href="#reauthentication" class="md-nav__link"> | |
2858 | Reauthentication | |
2859 | </a> | |
2860 | ||
2861 | </li> | |
2862 | ||
2863 | <li class="md-nav__item"> | |
2864 | <a href="#multi-factor-authentication" class="md-nav__link"> | |
2865 | Multi-factor Authentication | |
2866 | </a> | |
2867 | ||
2868 | <nav class="md-nav" aria-label="Multi-factor Authentication"> | |
2869 | <ul class="md-nav__list"> | |
2870 | ||
2871 | <li class="md-nav__item"> | |
2872 | <a href="#adding-multi-factor-methods" class="md-nav__link"> | |
2873 | Adding Multi-factor Methods | |
2874 | </a> | |
2875 | ||
2876 | </li> | |
2877 | ||
2878 | <li class="md-nav__item"> | |
2879 | <a href="#enforcing-multi-factor-authentication" class="md-nav__link"> | |
2880 | Enforcing Multi-factor Authentication | |
2881 | </a> | |
2882 | ||
2883 | </li> | |
2884 | ||
2885 | </ul> | |
2886 | </nav> | |
2887 | ||
2888 | </li> | |
2889 | ||
2890 | </ul> | |
2891 | </nav> | |
2892 | ||
2893 | </li> | |
2894 | ||
2895 | <li class="md-nav__item"> | |
2896 | <a href="#deprecations-and-removals" class="md-nav__link"> | |
2897 | Deprecations and Removals | |
2898 | </a> | |
2899 | ||
2900 | <nav class="md-nav" aria-label="Deprecations and Removals"> | |
2901 | <ul class="md-nav__list"> | |
2902 | ||
2903 | <li class="md-nav__item"> | |
2904 | <a href="#sessionhandler" class="md-nav__link"> | |
2905 | SessionHandler | |
2906 | </a> | |
2907 | ||
2908 | </li> | |
2909 | ||
2910 | <li class="md-nav__item"> | |
2911 | <a href="#acp-sessions" class="md-nav__link"> | |
2912 | ACP Sessions | |
2913 | </a> | |
2914 | ||
2915 | </li> | |
2916 | ||
2917 | <li class="md-nav__item"> | |
2918 | <a href="#cookies" class="md-nav__link"> | |
2919 | Cookies | |
2920 | </a> | |
2921 | ||
2922 | </li> | |
2923 | ||
2924 | <li class="md-nav__item"> | |
2925 | <a href="#virtual-sessions" class="md-nav__link"> | |
2926 | Virtual Sessions | |
2927 | </a> | |
2928 | ||
2929 | </li> | |
2930 | ||
2931 | <li class="md-nav__item"> | |
2932 | <a href="#security-token-constants" class="md-nav__link"> | |
2933 | Security Token Constants | |
2934 | </a> | |
2935 | ||
2936 | </li> | |
2937 | ||
2938 | <li class="md-nav__item"> | |
2939 | <a href="#passwordutil-and-double-bcrypt-hashes" class="md-nav__link"> | |
2940 | PasswordUtil and Double BCrypt Hashes | |
2941 | </a> | |
2942 | ||
2943 | </li> | |
2944 | ||
2945 | </ul> | |
2946 | </nav> | |
2947 | ||
2948 | </li> | |
2949 | ||
2950 | </ul> | |
2951 | ||
2952 | </nav> | |
2953 | </div> | |
2954 | </div> | |
2955 | </div> | |
2956 | ||
2957 | ||
7f9945cf WG |
2958 | |
2959 | <div class="md-content" data-md-component="content"> | |
2960 | <article class="md-content__inner md-typeset"> | |
9aa5da67 | 2961 | |
7f9945cf WG |
2962 | |
2963 | ||
e02609d6 WG |
2964 | |
2965 | ||
2966 | ||
9aa5da67 | 2967 | |
9aa5da67 WG |
2968 | <h1 id="migrating-from-woltlab-suite-53-session-handling-and-authentication">Migrating from WoltLab Suite 5.3 - Session Handling and Authentication<a class="headerlink" href="#migrating-from-woltlab-suite-53-session-handling-and-authentication" title="Permanent link">#</a></h1> |
2969 | <p>WoltLab Suite 5.4 includes a completely refactored session handling. | |
2970 | As long as you only interact with sessions via <code>WCF::getSession()</code>, especially when you perform read-only accesses, you should not notice any breaking changes.</p> | |
2971 | <p>You might appreciate some of the new session methods if you process security sensitive data.</p> | |
2972 | <h2 id="summary-and-concepts">Summary and Concepts<a class="headerlink" href="#summary-and-concepts" title="Permanent link">#</a></h2> | |
2973 | <p>Most of the changes revolve around the removal of the legacy persistent login functionality and the assumption that every user has a single session only. | |
2974 | Both aspects are related to each other.</p> | |
2975 | <h3 id="legacy-persistent-login">Legacy Persistent Login<a class="headerlink" href="#legacy-persistent-login" title="Permanent link">#</a></h3> | |
2976 | <p>The legacy persistent login was rather an automated login. | |
2977 | Upon bootstrapping a session, it was checked whether the user had a cookie pair storing the user’s <code>userID</code> and (a single BCrypt hash of) the user’s password. | |
2978 | If such a cookie pair exists and the BCrypt hash within the cookie matches the user’s password hash when hashed again, the session would immediately <code>changeUser()</code> to the respective user.</p> | |
2979 | <p>This legacy persistent login was completely removed. | |
2980 | Instead, any sessions that belong to an authenticated user will automatically be long-lived. | |
2981 | These long-lived sessions expire no sooner than 14 days after the last activity, ensuring that the user continously stays logged in, provided that they visit the page at least once per fortnight.</p> | |
2982 | <h3 id="multiple-sessions">Multiple Sessions<a class="headerlink" href="#multiple-sessions" title="Permanent link">#</a></h3> | |
2983 | <p>To allow for a proper separation of these long-lived user sessions, WoltLab Suite now allows for multiple sessions per user. | |
2984 | These sessions are completely unrelated to each other. | |
2985 | Specifically, they do not share session variables and they expire independently.</p> | |
2986 | <p>As the existing <code>wcf1_session</code> table is also used for the online lists and location tracking, it will be maintained on a best effort basis. | |
2987 | It no longer stores any private session data.</p> | |
2988 | <p>The actual sessions storing security sensitive information are in an unrelated location. | |
2989 | They must only be accessed via the PHP API exposed by the <code>SessionHandler</code>.</p> | |
2990 | <h3 id="merged-acp-and-frontend-sessions">Merged ACP and Frontend Sessions<a class="headerlink" href="#merged-acp-and-frontend-sessions" title="Permanent link">#</a></h3> | |
2991 | <p>WoltLab Suite 5.4 shares a single session across both the frontend, as well as the ACP. | |
2992 | When a user logs in to the frontend, they will also be logged into the ACP and vice versa.</p> | |
2993 | <p>Actual access to the ACP is controlled via the new <a href="#reauthentication">reauthentication mechanism</a>.</p> | |
2994 | <p>The session variable store is scoped: | |
2995 | Session variables set within the frontend are not available within the ACP and vice versa.</p> | |
2996 | <h3 id="improved-authentication-and-reauthentication">Improved Authentication and Reauthentication<a class="headerlink" href="#improved-authentication-and-reauthentication" title="Permanent link">#</a></h3> | |
2997 | <p>WoltLab Suite 5.4 ships with multi-factor authentication support and a generic re-authentication implementation that can be used to verify the account owner’s presence.</p> | |
2998 | <h2 id="additions-and-changes">Additions and Changes<a class="headerlink" href="#additions-and-changes" title="Permanent link">#</a></h2> | |
2999 | <h3 id="password-hashing">Password Hashing<a class="headerlink" href="#password-hashing" title="Permanent link">#</a></h3> | |
3000 | <p>WoltLab Suite 5.4 includes a new object-oriented password hashing framework that is modeled after PHP’s <code>password_*</code> API. | |
3001 | Check <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/user/authentication/password/PasswordAlgorithmManager.class.php"><code>PasswordAlgorithmManager</code></a> and <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/user/authentication/password/IPasswordAlgorithm.class.php"><code>IPasswordAlgorithm</code></a> for details.</p> | |
3002 | <p>The new default password hash is a standard BCrypt hash. | |
3003 | All newly generated hashes in <code>wcf1_user.password</code> will now include a type prefix, instead of just passwords imported from other systems.</p> | |
3004 | <h3 id="session-storage">Session Storage<a class="headerlink" href="#session-storage" title="Permanent link">#</a></h3> | |
3005 | <p>The <code>wcf1_session</code> table will no longer be used for session storage. | |
3006 | Instead, it is maintained for compatibility with existing online lists.</p> | |
3007 | <p>The actual session storage is considered an implementation detail and you <em>must not</em> directly interact with the session tables. | |
3008 | Future versions might support alternative session backends, such as Redis.</p> | |
3009 | <div class="admonition warning"> | |
3010 | <p class="admonition-title">Do not interact directly with the session database tables but only via the <code>SessionHandler</code> class!</p> | |
3011 | </div> | |
3012 | <h3 id="reauthentication">Reauthentication<a class="headerlink" href="#reauthentication" title="Permanent link">#</a></h3> | |
3013 | <p>For security sensitive processing, you might want to ensure that the account owner is actually present instead of a third party accessing a session that was accidentally left logged in.</p> | |
3014 | <p>WoltLab Suite 5.4 ships with a generic reauthentication framework. | |
3015 | To request reauthentication within your controller you need to:</p> | |
3016 | <ol> | |
3017 | <li>Use the <code>wcf\system\user\authentication\TReauthenticationCheck</code> trait.</li> | |
3018 | <li>Call: | |
3019 | <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span> | |
3020 | <span class="normal">2</span> | |
3021 | <span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nv">$this</span><span class="o">-></span><span class="na">requestReauthentication</span><span class="p">(</span><span class="nx">LinkHandler</span><span class="o">::</span><span class="na">getInstance</span><span class="p">()</span><span class="o">-></span><span class="na">getControllerLink</span><span class="p">(</span><span class="k">static</span><span class="o">::</span><span class="na">class</span><span class="p">,</span> <span class="p">[</span> | |
3022 | <span class="cm">/* additional parameters */</span> | |
3023 | <span class="p">]));</span> | |
3024 | </code></pre></div></td></tr></table></div></li> | |
3025 | </ol> | |
3026 | <p><code>requestReauthentication()</code> will check if the user has recently authenticated themselves. | |
3027 | If they did, the request proceeds as usual. | |
3028 | Otherwise, they will be asked to reauthenticate themselves. | |
3029 | After the successful authentication, they will be redirected to the URL that was passed as the first parameter (the current controller within the example).</p> | |
3030 | <p>Details can be found in <a href="https://github.com/WoltLab/WCF/pull/3775">WoltLab/WCF#3775</a>.</p> | |
3031 | <h3 id="multi-factor-authentication">Multi-factor Authentication<a class="headerlink" href="#multi-factor-authentication" title="Permanent link">#</a></h3> | |
3032 | <p>To implement multi-factor authentication securely, WoltLab Suite 5.4 implements the concept of a “pending user change”. | |
3033 | The user will not be logged in (i.e. <code>WCF::getUser()->userID</code> returns <code>null</code>) until they authenticate themselves with their second factor.</p> | |
3034 | <p>Requesting multi-factor authentication is done on an opt-in basis for compatibility reasons. | |
3035 | If you perform authentication yourself and do not trust the authentication source to perform multi-factor authentication itself, you will need to adjust your logic to request multi-factor authentication from WoltLab Suite:</p> | |
3036 | <p>Previously:</p> | |
3037 | <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nx">WCF</span><span class="o">::</span><span class="na">getSession</span><span class="p">()</span><span class="o">-></span><span class="na">changeUser</span><span class="p">(</span><span class="nv">$targetUser</span><span class="p">);</span> | |
3038 | </code></pre></div></td></tr></table></div> | |
3039 | <p>Now:</p> | |
3040 | <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span> | |
3041 | <span class="normal"> 2</span> | |
3042 | <span class="normal"> 3</span> | |
3043 | <span class="normal"> 4</span> | |
3044 | <span class="normal"> 5</span> | |
3045 | <span class="normal"> 6</span> | |
3046 | <span class="normal"> 7</span> | |
3047 | <span class="normal"> 8</span> | |
3048 | <span class="normal"> 9</span> | |
3049 | <span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nv">$isPending</span> <span class="o">=</span> <span class="nx">WCF</span><span class="o">::</span><span class="na">getSession</span><span class="p">()</span><span class="o">-></span><span class="na">changeUserAfterMultifactorAuthentication</span><span class="p">(</span><span class="nv">$targetUser</span><span class="p">);</span> | |
3050 | <span class="k">if</span> <span class="p">(</span><span class="nv">$isPending</span><span class="p">)</span> <span class="p">{</span> | |
3051 | <span class="c1">// Redirect to the authentication form. The user will not be logged in.</span> | |
3052 | <span class="c1">// Note: Do not use `getControllerLink` to support both the frontend as well as the ACP.</span> | |
3053 | <span class="nx">HeaderUtil</span><span class="o">::</span><span class="na">redirect</span><span class="p">(</span><span class="nx">LinkHandler</span><span class="o">::</span><span class="na">getInstance</span><span class="p">()</span><span class="o">-></span><span class="na">getLink</span><span class="p">(</span><span class="s1">'MultifactorAuthentication'</span><span class="p">,</span> <span class="p">[</span> | |
3054 | <span class="s1">'url'</span> <span class="o">=></span> <span class="cm">/* Return To */</span><span class="p">,</span> | |
3055 | <span class="p">]));</span> | |
3056 | <span class="k">exit</span><span class="p">;</span> | |
3057 | <span class="p">}</span> | |
3058 | <span class="c1">// Proceed as usual. The user will be logged in.</span> | |
3059 | </code></pre></div></td></tr></table></div> | |
3060 | <h4 id="adding-multi-factor-methods">Adding Multi-factor Methods<a class="headerlink" href="#adding-multi-factor-methods" title="Permanent link">#</a></h4> | |
3061 | <p>Adding your own multi-factor method requires the implementation of a single object type:</p> | |
3062 | <div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">objectType.xml</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span> | |
3063 | <span class="normal">2</span> | |
3064 | <span class="normal">3</span> | |
3065 | <span class="normal">4</span> | |
3066 | <span class="normal">5</span> | |
3067 | <span class="normal">6</span> | |
3068 | <span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nt"><type></span> | |
c708394c WG |
3069 | <span class="w"> </span><span class="nt"><name></span>com.example.multifactor.foobar<span class="nt"></name></span> |
3070 | <span class="w"> </span><span class="nt"><definitionname></span>com.woltlab.wcf.multifactor<span class="nt"></definitionname></span> | |
3071 | <span class="w"> </span><span class="nt"><icon></span><span class="cm"><!-- Font Awesome 4 Icon Name goes here. --></span><span class="nt"></icon></span> | |
3072 | <span class="w"> </span><span class="nt"><priority></span><span class="cm"><!-- Determines the sort order, higher priority will be preferred for authentication. --></span><span class="nt"></priority></span> | |
3073 | <span class="w"> </span><span class="nt"><classname></span>wcf\system\user\multifactor\FoobarMultifactorMethod<span class="nt"></classname></span> | |
9aa5da67 WG |
3074 | <span class="nt"></type></span> |
3075 | </code></pre></div></td></tr></table></div> | |
3076 | <p>The given classname must implement the <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/user/multifactor/IMultifactorMethod.class.php"><code>IMultifactorMethod</code></a> interface.</p> | |
3077 | <p>As a self-contained example, you can find the initial implementation of the email multi-factor method in <a href="https://github.com/WoltLab/WCF/pull/3729">WoltLab/WCF#3729</a>. | |
3078 | Please check <a href="https://github.com/WoltLab/WCF/commits/master/wcfsetup/install/files/lib/system/user/multifactor/EmailMultifactorMethod.class.php">the version history</a> of the PHP class to make sure you do not miss important changes that were added later.</p> | |
3079 | <div class="admonition warning"> | |
3080 | <p class="admonition-title">Multi-factor authentication is security sensitive. Make sure to carefully read the remarks in <code>IMultifactorMethod</code> for possible issues. Also make sure to carefully test your implementation against all sorts of incorrect input and consider attack vectors such as race conditions. It is strongly recommended to generously check the current state by leveraging assertions and exceptions.</p> | |
3081 | </div> | |
3082 | <h4 id="enforcing-multi-factor-authentication">Enforcing Multi-factor Authentication<a class="headerlink" href="#enforcing-multi-factor-authentication" title="Permanent link">#</a></h4> | |
3083 | <p>To enforce Multi-factor Authentication within your controller you need to:</p> | |
3084 | <ol> | |
3085 | <li>Use the <code>wcf\system\user\multifactor\TMultifactorRequirementEnforcer</code> trait.</li> | |
3086 | <li>Call: <code>$this->enforceMultifactorAuthentication();</code></li> | |
3087 | </ol> | |
3088 | <p><code>enforceMultifactorAuthentication()</code> will check if the user is in a group that requires multi-factor authentication, but does not yet have multi-factor authentication enabled. | |
3089 | If they did, the request proceeds as usual. | |
3090 | Otherwise, a <code>NamedUserException</code> is thrown.</p> | |
3091 | <h2 id="deprecations-and-removals">Deprecations and Removals<a class="headerlink" href="#deprecations-and-removals" title="Permanent link">#</a></h2> | |
3092 | <h3 id="sessionhandler">SessionHandler<a class="headerlink" href="#sessionhandler" title="Permanent link">#</a></h3> | |
3093 | <p>Most of the changes with regard to the new session handling happened in <code>SessionHandler</code>. | |
3094 | Most notably, <code>SessionHandler</code> now is marked <code>final</code> to ensure proper encapsulation of data.</p> | |
3095 | <p>A number of methods in <code>SessionHandler</code> are now deprecated and result in a noop. | |
3096 | This change mostly affects methods that have been used to bootstrap the session, such as <code>setHasValidCookie()</code>.</p> | |
3097 | <p>Additionally, accessing the following keys on the session is deprecated. | |
3098 | They directly map to an existing method in another class and any uses can easily be updated: | |
3099 | - <code>ipAddress</code> | |
3100 | - <code>userAgent</code> | |
3101 | - <code>requestURI</code> | |
3102 | - <code>requestMethod</code> | |
3103 | - <code>lastActivityTime</code></p> | |
3104 | <p>Refer to <a href="https://github.com/WoltLab/WCF/blob/439de4963c947c3569a0c584f795245f693155b0/wcfsetup/install/files/lib/system/session/SessionHandler.class.php#L168-L178">the implementation</a> for details.</p> | |
3105 | <h3 id="acp-sessions">ACP Sessions<a class="headerlink" href="#acp-sessions" title="Permanent link">#</a></h3> | |
3106 | <p>The database tables related to ACP sessions have been removed. | |
3107 | The PHP classes have been preserved due to being used within the class hierarchy of the legacy sessions.</p> | |
3108 | <h3 id="cookies">Cookies<a class="headerlink" href="#cookies" title="Permanent link">#</a></h3> | |
3109 | <p>The <code>_userID</code>, <code>_password</code>, <code>_cookieHash</code> and <code>_cookieHash_acp</code> cookies will no longer be created nor consumed.</p> | |
3110 | <h3 id="virtual-sessions">Virtual Sessions<a class="headerlink" href="#virtual-sessions" title="Permanent link">#</a></h3> | |
3111 | <p>The virtual session logic existed to support multiple devices per single session in <code>wcf1_session</code>. | |
3112 | Virtual sessions are no longer required with the refactored session handling.</p> | |
3113 | <p>Anything related to virtual sessions has been completely removed as they are considered an implementation detail. | |
3114 | This removal includes PHP classes and database tables.</p> | |
3115 | <h3 id="security-token-constants">Security Token Constants<a class="headerlink" href="#security-token-constants" title="Permanent link">#</a></h3> | |
3116 | <p>The security token constants are deprecated. | |
3117 | Instead, the methods of <code>SessionHandler</code> should be used (e.g. <code>->getSecurityToken()</code>). | |
3118 | Within templates, you should migrate to the <code>{csrfToken}</code> tag in place of <code>{@SECURITY_TOKEN_INPUT_TAG}</code>. | |
3119 | The <code>{csrfToken}</code> tag is a drop-in replacement and was backported to WoltLab Suite 5.2+, allowing you to maintain compatibility across a broad range of versions.</p> | |
3120 | <h3 id="passwordutil-and-double-bcrypt-hashes">PasswordUtil and Double BCrypt Hashes<a class="headerlink" href="#passwordutil-and-double-bcrypt-hashes" title="Permanent link">#</a></h3> | |
3121 | <p>Most of the methods in PasswordUtil are deprecated in favor of the new password hashing framework.</p> | |
3122 | ||
3123 | <hr> | |
3124 | <div class="md-source-file"> | |
3125 | <small> | |
3126 | ||
3127 | Last update: | |
3128 | 2022-05-13 | |
3129 | ||
3130 | </small> | |
3131 | </div> | |
3132 | ||
a06fd3b1 WG |
3133 | |
3134 | ||
3135 | ||
7f9945cf WG |
3136 | |
3137 | ||
3138 | </article> | |
3139 | </div> | |
3140 | ||
3141 | ||
9aa5da67 WG |
3142 | </div> |
3143 | ||
3144 | </main> | |
3145 | ||
3146 | <footer class="md-footer"> | |
3147 | ||
9aa5da67 WG |
3148 | <div class="md-footer-meta md-typeset"> |
3149 | <div class="md-footer-meta__inner md-grid"> | |
3150 | <div class="md-copyright"> | |
3151 | ||
3152 | <div class="md-copyright__highlight"> | |
3153 | Copyright © 2020 WoltLab GmbH | |
3154 | </div> | |
3155 | ||
3156 | ||
3157 | Made with | |
3158 | <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> | |
3159 | Material for MkDocs | |
3160 | </a> | |
3161 | ||
3162 | </div> | |
3163 | ||
3164 | <div class="md-copyright"> | |
3165 | <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a> | |
3166 | <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a> | |
3167 | </div> | |
3168 | ||
3169 | </div> | |
3170 | </div> | |
3171 | </footer> | |
3172 | ||
3173 | </div> | |
3174 | <div class="md-dialog" data-md-component="dialog"> | |
3175 | <div class="md-dialog__inner md-typeset"></div> | |
3176 | </div> | |
a06fd3b1 | 3177 | |
6f2e8f13 | 3178 | <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.tracking"], "search": "../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> |
9aa5da67 WG |
3179 | |
3180 | ||
ea01e590 | 3181 | <script src="../../../assets/javascripts/bundle.b4d07000.min.js"></script> |
9aa5da67 WG |
3182 | |
3183 | ||
3184 | </body> | |
3185 | </html> |