Santyago

Рейтинг
139
Регистрация
15.07.2008
Чеширский:
Рефер подделывается, запрос (пост или гет) можно тоже выбирать. Не канает.

Именно так. Рекомендация нулёвая.

Самый простой метод: сделать через сессии. При обращении к 1.php создаётся сессия, кук с её идентификатором попадает в браузер, где выполняется ajax-запрос. Вместе с этим запросом в 2.php уходит кук с айди открытой сессии. В 2.php необходимо сделать проверку на существование сессионного кука, на существование этой сессии и только тогда отдавать XML. Т.о. мы получаем _обязательную_ необходимость посещения 1.php перед тем как получить данные из 2.php.

Скажу честно, такую защиту я поломаю с помощью Curl примерно минут за 10. Но не зная методики защиты, для большинства это будет проблемой. Так что, лучше так, чем вообще никак. :)

Дальше уже можно навернуть ещё что-то сверху этого метода. Для начала, думаю, и этого хватит.

Santyago добавил 12.02.2010 в 18:24

bearman:
"ключик" добавьте

2.php?mysecretkey=yahahahah_you_are_fucking_hacker_lamer

ну и 2.php
<?
if($_GET['mysecretkey'] != "yahahahah_you_are_fucking_hacker_lamer")
{
die(strtoupper(str_replace("_"," ","yahahahah_you_are_fucking_hacker_lamer")));
}

Т.е. один ключик для всех? Смотришь исходник в браузере, копируешь ключик и используешь сколько влезет?

T.R.O.N:
да вы что? откуда инфа?
ВЫ путаете с CGI::Session... это у него создается механизм файловый/мускульный/иной

ППЦ... Ну точно тролль...

Apache::Session - A persistence framework for session data

Apache::Session is a persistence framework which is particularly useful for tracking session data between httpd requests. Apache::Session is designed to work with Apache and mod_perl, but it should work under CGI and other web servers, and it also works outside of a web server altogether.

_it also works outside of a web server altogether_

Перевести?

CGI::Session - persistent session data in CGI applications

CGI-Session is a Perl5 library that provides an easy, reliable and modular session management system across HTTP requests. Persistency is a key feature for such applications as shopping carts, login/authentication routines, and application that need to carry data accross HTTP requests. CGI::Session does that and many more

Всё. Это мой последний пост в данном топике в виду полной неадекватности главного оппонента.

Best regards!

T.R.O.N:
Ваша, дорогой человек

Утверждение о том, что "сервак ложиться по переполнению памяти" из-за использования memcached - это полная некомпетентность и "сказать абы что сказать".

T.R.O.N:
я поэтому и сказал, что пыхом не знаимаюсь... Аппач имеет свои сессии, как почти и любой иной веб сервер (иначе оно просто захлебнется)..
Даже у старенького перла была библиотека для работы с ними Apache::Session

Феерическая некомпетентность. Не позортесь, молодой человек.

T.R.O.N:
А то что пых стал движком... это супер. Ждите, бирман придет.. он такое любит

Вам знакомо устоявшееся в узких кругах выражение "PHP engine"? Ну, да... Вы же не "пыхом не занимаетесь"... Тогда может хватить позориться или очень хочется поспорить?

T.R.O.N:
а причем тут папка? Данные сессии просто исчезнут, когда сессия заканчивается... (если кривые руки не изменят настройки)
как делать именно на пыхе, никогда не интересовался.. об окончании сессии возникает событие сервера. Для IIS это Session_OnEnd.... об аппачи - читайте

При чём тут Апач? Сессии организовываются движком PHP. Никаких событий на эту тему этот движок не генерирует. Перед тем как посоветовать очередную глупость, неплохо было бы хоть чуть-чуть в теме разбираться.

T.R.O.N:
и сервак ложиться по переполнению памяти... оченнь круглые колеса

Ничего личного, но это очередная глупость.

PHP надо собрать с ключём --with-iconv

Senator007:
Добрый день, Уважаемые специалисты!

Помогите пожалуйста разобраться и найти пусть в следующем вопросе:
Есть например таблица почти в миллион строк:

table sms (myisam)
id int
people_in int (связь на табличку с юзерами)
people_out int (связь на табличку с юзерами)
tema char (50)
core text
dt datetime

в которой содержаться сообщения от пользователей (от кого и кому).. в пике при частых insert новых строк и удалении прочитанных, происходят задержка в чтении..

Как грамотно организовать дальнейшую разработку и масштабируемость, если мне как раз и необходимо читать из неё то что было добавлено.. Ведь кол-во insert будеn расти и она будет падать.. Перевод на транзакции? Но это размер будет расти, а для того чтобы достать одну свежую последнюю запись нужно будет смотреть по всей таблице! Не вариант, разбить на партишены? Да можно, но это тоже временный выход..
Каким образом это например делает на крупных проектах, если база на одном сервере и если база на двух и более?

Варианты:

1. INSERT DELAYED в помощь в случае использования MyISAM

2. Использование InnoDB

Транзакции тут ни при чём. Проблема в уровне изоляции и умении движка делать row-lock.

Senator007:
Второй вопрос:

Есть табличка people

id int
name char(40)
last_time (время в секундах от 1970)

в поле last_time делает update текущего времени при заходе пользователя на половине страниц.
Табличка участвует практически в каждых запросах на сайте (отобразить сообщения, статьи, дневники и прочее), чтобы было видно этот участник в сети или нет. Соответственно при высокой нагрузке updatов больше и происходит lock по селекту.. Какой здесь путь масштабируемости? Где хранить данные о посещении и как и как их использовать в частых запросах?

Поделитесь пожалуйста опытом, а то я только начинаю, и уже уткнулся в стопор..
Заранее благодарен!

Грамотно это делается через memcached. Заводится шаред массив с активными сессиями пользователей. Дальше начинаются вариации в зависимости от постановки задачи.

Santyago добавил 12.02.2010 в 12:57

T.R.O.N:
1. переходят с мускула на что-то серьезней, тот-же MsSql....
2. Есть понятие кластерные сервера...
3. Можно искать умные решения.. например.. делать базу, где хранится только актуальная информация, допустим за последние неделю/сутки/час, в конце дня ее переливать в общую, аля архив...

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

А ещё, говорят, бывают велосипеды с квадратными колёсами...

netwind:
Santyago, нет,пардон. ваш способ тоже полностью "материализует" данные.
разве что при большом числе постов самообъединение очень невыгодно. если попробовать на большой базе, то можно и не дождаться.

Как раз такой джоин при нормально построенных индексах будет эффективнее, чем подзапрос на каждую запись из таблицы постов (к тому же ещё и с группировкой). Ход мысли в исходном запросе я, честного говоря, вообще не понял. Дикость какая-то.

ЗЫ. Миллионах на 10 записях скорее всего загнётся. :) Там временная таблица будет строиться вечность.

netwind:
Santyago, не должен, по очевидной причине, с которой ТС и пришел.

А Вы пробовали?

netwind:
Santyago, а вы свое запускать пробовали?

А что? Не работает? :D

DELETE wp1 FROM wp_posts wp1

INNER JOIN wp_posts wp2

WHERE wp1.post_title=wp2.post_title AND wp1.id > wp2.id

Всего: 304