הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   ניתוק משתמש ממערכת הפורומים (https://hosts.co.il/forums/showthread.php?t=75681)

HOLD 17-06-09 20:18

ניתוק משתמש ממערכת הפורומים
 
האתר שלי מחובר למערכת פורומים phpBB3 ואני רוצה שתהיה לי אפשרות לנתק אותו דרך האתר,
הכוונה היא שהוא לא יצטרך להכנס לפורום כדי להתנתק.

איך אני עושה את זה?

ניסיתי למחוק את הקוקיז, משום מה אני לא יכול למחוק את הקוקיז שהמערכת יצרה.

יש אולי איזשהו תיעוד למערכת שממנו אפשר ללמוד איך למחוק את העוגיות?

תודה.

Shay Ben Moshe 17-06-09 20:37

תראה, אני מאמין שבמערכת עצמה יש פונקצייה שמוחקת עוגיות.
תחפש בקובץ התנתקות איך זה מנתק, ותלמד מזה.

(עריכה: הודעה 666 חח)

HOLD 17-06-09 20:41

זה הקובץ:
קוד:

<?php
/**
*
* @package ucp
* @version $Id: ucp.php 8915 2008-09-23 13:30:52Z acydburn $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);

// Basic parameter data
$id        = request_var('i', '');
$mode        = request_var('mode', '');

if ($mode == 'login' || $mode == 'logout' || $mode == 'confirm')
{
        define('IN_LOGIN', true);
}

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('ucp');

// Setting a variable to let the style designer know where he is...
$template->assign_var('S_IN_UCP', true);

$module = new p_master();
$default = false;

// Basic "global" modes
switch ($mode)
{
        case 'activate':
                $module->load('ucp', 'activate');
                $module->display($user->lang['UCP_ACTIVATE']);

                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
        break;

        case 'resend_act':
                $module->load('ucp', 'resend');
                $module->display($user->lang['UCP_RESEND']);
        break;

        case 'sendpassword':
                $module->load('ucp', 'remind');
                $module->display($user->lang['UCP_REMIND']);
        break;

        case 'register':
                if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
                {
                        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                $module->load('ucp', 'register');
                $module->display($user->lang['REGISTER']);
        break;

        case 'confirm':
                $module->load('ucp', 'confirm');
        break;

        case 'login':
                if ($user->data['is_registered'])
                {
                        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                login_box(request_var('redirect', "index.$phpEx"));
        break;

        case 'logout':
                if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) && $_GET['sid'] === $user->session_id)
                {
                        $user->session_kill();
                        $user->session_begin();
                        $message = $user->lang['LOGOUT_REDIRECT'];
                }
                else
                {
                        $message = ($user->data['user_id'] == ANONYMOUS) ? $user->lang['LOGOUT_REDIRECT'] : $user->lang['LOGOUT_FAILED'];
                }
                meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));

                $message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a> ');
                trigger_error($message);

        break;

        case 'terms':
        case 'privacy':

                $message = ($mode == 'terms') ? 'TERMS_OF_USE_CONTENT' : 'PRIVACY_POLICY';
                $title = ($mode == 'terms') ? 'TERMS_USE' : 'PRIVACY';

                if (empty($user->lang[$message]))
                {
                        if ($user->data['is_registered'])
                        {
                                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                        }

                        login_box();
                }

                $template->set_filenames(array(
                        'body'                => 'ucp_agreement.html')
                );

                // Disable online list
                page_header($user->lang[$title], false);

                $template->assign_vars(array(
                        'S_AGREEMENT'                        => true,
                        'AGREEMENT_TITLE'                => $user->lang[$title],
                        'AGREEMENT_TEXT'                => sprintf($user->lang[$message], $config['sitename'], generate_board_url()),
                        'U_BACK'                                => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'),
                        'L_BACK'                                => $user->lang['BACK_TO_LOGIN'])
                );

                page_footer();

        break;

        case 'delete_cookies':

                // Delete Cookies with dynamic names (do NOT delete poll cookies)
                if (confirm_box(true))
                {
                        $set_time = time() - 31536000;

                        foreach ($_COOKIE as $cookie_name => $cookie_data)
                        {
                                $cookie_name = str_replace($config['cookie_name'] . '_', '', $cookie_name);

                                // Polls are stored as {cookie_name}_poll_{topic_id}, cookie_name_ got removed, therefore checking for poll_
                                if (strpos($cookie_name, 'poll_') !== 0)
                                {
                                        $user->set_cookie($cookie_name, '', $set_time);
                                }
                        }

                        $user->set_cookie('track', '', $set_time);
                        $user->set_cookie('u', '', $set_time);
                        $user->set_cookie('k', '', $set_time);
                        $user->set_cookie('sid', '', $set_time);

                        // We destroy the session here, the user will be logged out nevertheless
                        $user->session_kill();
                        $user->session_begin();

                        meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));

                        $message = $user->lang['COOKIES_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
                        trigger_error($message);
                }
                else
                {
                        confirm_box(false, 'DELETE_COOKIES', '');
                }

                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));

        break;

        case 'switch_perm':

                $user_id = request_var('u', 0);

                $sql = 'SELECT *
                        FROM ' . USERS_TABLE . '
                        WHERE user_id = ' . (int) $user_id;
                $result = $db->sql_query($sql);
                $user_row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);

                if (!$auth->acl_get('a_switchperm') || !$user_row || $user_id == $user->data['user_id'])
                {
                        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);

                $auth_admin = new auth_admin();
                if (!$auth_admin->ghost_permissions($user_id, $user->data['user_id']))
                {
                        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                add_log('admin', 'LOG_ACL_TRANSFER_PERMISSIONS', $user_row['username']);

                $message = sprintf($user->lang['PERMISSIONS_TRANSFERRED'], $user_row['username']) . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
                trigger_error($message);

        break;

        case 'restore_perm':

                if (!$user->data['user_perm_from'] || !$auth->acl_get('a_switchperm'))
                {
                        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                $auth->acl_cache($user->data);

                $sql = 'UPDATE ' . USERS_TABLE . "
                        SET user_perm_from = 0
                        WHERE user_id = " . $user->data['user_id'];
                $db->sql_query($sql);

                $sql = 'SELECT username
                        FROM ' . USERS_TABLE . '
                        WHERE user_id = ' . $user->data['user_perm_from'];
                $result = $db->sql_query($sql);
                $username = $db->sql_fetchfield('username');
                $db->sql_freeresult($result);

                add_log('admin', 'LOG_ACL_RESTORE_PERMISSIONS', $username);

                $message = $user->lang['PERMISSIONS_RESTORED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
                trigger_error($message);

        break;

        default:
                $default = true;
        break;
}

// We use this approach because it does not impose large code changes
if (!$default)
{
        return true;
}

// Only registered users can go beyond this point
if (!$user->data['is_registered'])
{
        if ($user->data['is_bot'])
        {
                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
        }

        login_box('', $user->lang['LOGIN_EXPLAIN_UCP']);
}

// Instantiate module system and generate list of available modules
$module->list_modules('ucp');

// Check if the zebra module is set
if ($module->is_active('zebra', 'friends'))
{
        // Output listing of friends online
        $update_time = $config['load_online_time'] * 60;

        $sql = $db->sql_build_query('SELECT_DISTINCT', array(
                'SELECT'        => 'u.user_id, u.username, u.username_clean, u.user_colour, MAX(s.session_time) as online_time, MIN(s.session_viewonline) AS viewonline',

                'FROM'                => array(
                        USERS_TABLE                => 'u',
                        ZEBRA_TABLE                => 'z'
                ),

                'LEFT_JOIN'        => array(
                        array(
                                'FROM'        => array(SESSIONS_TABLE => 's'),
                                'ON'        => 's.session_user_id = z.zebra_id'
                        )
                ),

                'WHERE'                => 'z.user_id = ' . $user->data['user_id'] . '
                        AND z.friend = 1
                        AND u.user_id = z.zebra_id',

                'GROUP_BY'        => 'z.zebra_id, u.user_id, u.username_clean, u.user_colour, u.username',

                'ORDER_BY'        => 'u.username_clean ASC',
        ));

        $result = $db->sql_query($sql);

        while ($row = $db->sql_fetchrow($result))
        {
                $which = (time() - $update_time < $row['online_time'] && ($row['viewonline'] || $auth->acl_get('u_viewonline'))) ? 'online' : 'offline';

                $template->assign_block_vars("friends_{$which}", array(
                        'USER_ID'                => $row['user_id'],

                        'U_PROFILE'                => get_username_string('profile', $row['user_id'], $row['username'], $row['user_colour']),
                        'USER_COLOUR'        => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']),
                        'USERNAME'                => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']),
                        'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']))
                );
        }
        $db->sql_freeresult($result);
}

// Do not display subscribed topics/forums if not allowed
if (!$config['allow_topic_notify'] && !$config['allow_forum_notify'])
{
        $module->set_display('main', 'subscribed', false);
}

// Select the active module
$module->set_active($id, $mode);

// Load and execute the relevant module
$module->load_active();

// Assign data to the template engine for the list of modules
$module->assign_tpl_vars(append_sid("{$phpbb_root_path}ucp.$phpEx"));

// Generate the page, do not display/query online list
$module->display($module->get_page_title(), false);

/**
* Function for assigning a template var if the zebra module got included
*/
function _module_zebra($mode, &$module_row)
{
        global $template;

        $template->assign_var('S_ZEBRA_ENABLED', true);

        if ($mode == 'friends')
        {
                $template->assign_var('S_ZEBRA_FRIENDS_ENABLED', true);
        }

        if ($mode == 'foes')
        {
                $template->assign_var('S_ZEBRA_FOES_ENABLED', true);
        }
}

?>

פה הניתוק:
קוד:

        case 'logout':
                if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) && $_GET['sid'] === $user->session_id)
                {
                        $user->session_kill();
                        $user->session_begin();
                        $message = $user->lang['LOGOUT_REDIRECT'];
                }

זה הלינק:
phpBB3/ucp.php?mode=logout&sid=069ed3eebc3d1b46a7cbe45894 3aee85

Shay Ben Moshe 17-06-09 21:16

אני מאמין שזה עובד אז עם session.
צריך להיות קובץ עם framework או סתם קובץ עם כמה מחלקות ששם יש את הuser הזה או משהו
תבדוק מה שם הSESSION ותשמיד אותו.

HOLD 17-06-09 21:23

ציטוט:

נכתב במקור על ידי The Chosen Generl (פרסם 722201)
אני מאמין שזה עובד אז עם session.
צריך להיות קובץ עם framework או סתם קובץ עם כמה מחלקות ששם יש את הuser הזה או משהו
תבדוק מה שם הSESSION ותשמיד אותו.

100% שזה עוגיות,
מחקתי בעזרת הדפדפן את כל העוגיות מהאתר שלי וזה התנתק.

OrPol 17-06-09 22:13

ציטוט:

נכתב במקור על ידי HOLD (פרסם 722204)
100% שזה עוגיות,
מחקתי בעזרת הדפדפן את כל העוגיות מהאתר שלי וזה התנתק.

במערכות שאני בונה זה SESSION על מסד נתונים לפי IP...

פשוט תפנה את הלקוח לעמוד של הLOGOUT
או שתעשה POPUP שמוביל למיקום הזה ונסגר לאחר מכן.

Shay Ben Moshe 17-06-09 22:15

רעיון נחמד.
אם בכלל אין ברירה, תעשה IFRAME :)

HOLD 17-06-09 22:25

ציטוט:

נכתב במקור על ידי Or Polaczek (פרסם 722218)
במערכות שאני בונה זה SESSION על מסד נתונים לפי IP...

פשוט תפנה את הלקוח לעמוד של הLOGOUT
או שתעשה POPUP שמוביל למיקום הזה ונסגר לאחר מכן.

אם אני מפנה אותו לעמוד של ה-LOGOUT זה מעביר אותו לפורום,
דבר מאוד מעצבן בהתחשב בעובדה שהוא מנסה להתנתק מהפורום.

popup לא בא בחשבון, זה יהיה דבילי לטעון את כל הדף ואז לסגור אותו.

ציטוט:

נכתב במקור על ידי The Chosen Generl (פרסם 722219)
רעיון נחמד.
אם בכלל אין ברירה, תעשה IFRAME :)

ציטוט:

זה יהיה דבילי לטעון את כל הדף ואז לסגור אותו.

OrPol 17-06-09 22:50

ציטוט:

נכתב במקור על ידי HOLD (פרסם 722223)
אם אני מפנה אותו לעמוד של ה-LOGOUT זה מעביר אותו לפורום,
דבר מאוד מעצבן בהתחשב בעובדה שהוא מנסה להתנתק מהפורום.

popup לא בא בחשבון, זה יהיה דבילי לטעון את כל הדף ואז לסגור אותו.

אז תשבור את הראש, תאנקלד את כל מה שמאונקלד בפורום ותריץ את הפונקציה, כי זה יותר חכם, ובכלל לא כמו לטעון את כל הדף ולסגור אותו - זה לטעון את כולו ולהשאיר אותו פתוח :\

HOLD 18-06-09 00:18

נפתר.


כל הזמנים הם GMT +2. הזמן כעת הוא 04:44.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ